2016-07-13 5 views
1

C#のMath.Sqrtで興味深い問題があります。 Math.Sqrtから1つのアプリケーション(アプリケーションの別の場所)で異なる出力が得られます。CathのMath.Sqrtから別の出力を得る

私は大きなプロジェクトとアプリケーションが数学計算をたくさん持っている。私は毎回出力1.4142135623730951にしたい

private void Win_Load(object sender, EventArgs e) 
    { 
double myOutput = Math.Sqrt(2.0); //1.4142135623730951 
IrrlichtCreationParameters creationParameter = new IrrlichtCreationParameters(); 
creationParameter.DriverType = IrrlichtLime.Video.DriverType.Direct3D9; 
IrrlichtDevice.CreateDevice(creationParameter); 
myOutput = Math.Sqrt(2.0);//1.4142135381698608 
} 

ストーリー

アニメーションIrrlich DLLは、アプリケーション コードでの使用です。

誰もが使用IrrlichtLime.Video.DriverType.Direct3D9後に別の出力を得たのはなぜ任意のアイデアを持っていますか?

出力がMath.sqrtと異なる場合は、

+0

正確なコードを表示できますか? – user3185569

+0

コードdouble myOutput = Math.Sqrt(2.0);両方の場所 – user2960398

+0

ハードコードされた2.0を渡していますか?またはいくつかの計算に基づいて? – user3185569

答えて

7

あなたが一貫性のないタイプの使用(本家私はあなたのコードが表示されない)が、ここで証明されてい:あなたはどこでも同じタイプを使用する必要があり、任意の鋳造を行うか、あなたがかもしれません

double v1 = Math.Sqrt(2.0); // 1.4142135623730951 
double v2 = (float)Math.Sqrt(2.0); // 1.4142135381698608 

を精度を失う。

あなたが値2.0(それはそれ多分≃2.0)を持って前に計算をたくさんやっているようです。 Doubleはすべての数値を正確に表すことはできません。精度が必要な場合はDecimalを使用する必要があります。

+0

はい、同じ出力を得ました。ログインページで double v2 =(float)Math.Sqrt(2.0);ログインページの後 出力:1.4142135381698608 しかし、私は毎回出力1.4142135623730951にしたいです。私はpinv(MATHLAB)関数(mathlabをC#に変換)でこの値を使用しているからです。 私はこの値1.4142135623730951を使用すると、mathlabアルゴリズムの出力を正しく取得できます。 – user2960398

+0

@ user2960398あなたが 'Math.Sqrt'を使用しているところでコードの部分を表示し、それをMATHLABに渡す方法を示してください。質問を編集し、その情報を表示します。 – user3185569

+0

最初に私は のようなサンプルコードで遊んでいます。ログインページで double myOutput = Math.Sqrt(2.0);アプリケーションページ ダブルmyOutput = Math.Sqrtで//1.4142135623730951 (2.0)。 //1.4142135381698608 – user2960398

0

あなたは「間違った」結果が何であるかを言うが、SQRTのような数学的な操作は、常にいくつかの丸め誤差を持っていることに注意してはいけません。これは、ダブルスを直接比較するのではなく、許容範囲内に近いことを確認することを意味します。

const double delta = 0.00000001d; 
bool same = Math.Abs(d1 - d2) < delta; 

あなたはほぼ同じ答えを得るのであれば、これはあなたが倍精度数から得ることができる最高についてです。

+0

どちらの結果も正しいです。しかし、IrrlichtDevice.CreateDevice(creationParameter)の後にこの結果1.4142135623730951(1.4142135381698608ではなく)が必要です。 – user2960398

関連する問題