3

C# で記述されたプログラムがあり、一部はネイティブ C/C++ で記述されています。double を使用していくつかの値を計算すると、精度が小さすぎるために結果が間違っていることがあります。調査の結果、誰かが浮動小数点の精度を 24 ビットに設定していることがわかりました。(_fpreset または _controlfp を使用して) 精度を少なくとも 53 ビットにリセットすると、私のコードは正常に動作しますが、最初に精度を 24 ビットに設定した責任者を特定する必要があります。

これを達成できるアイデアはありますか?

4

3 に答える 3

13

これは、デフォルトの Direct3D デバイスの初期化が原因です。D3DCREATE_FPU_PRESERVEにフラグを渡すことで、FPU の精度を台無しにしないように Direct3D に指示できますCreateDevice。必要に応じて、このフラグに相当するマネージ コード ( CreateFlags.FpuPreserve) もあります。

詳細については、Direct3D と FPU を参照してください。

于 2009-07-30T07:13:10.083 に答える
1

プログラムへのパーティションによるバイナリ検索と、どの呼び出しが精度を低下させるかを判断するのはどうですか?

于 2009-07-29T15:25:06.320 に答える
0

あなたのコードは DirectX または XNA を使用していますか? それが原因で問題が発生していると確かに聞いたことがあります.DirectX初期化コードの一部(おそらくマネージラッパーのみ?)が精度を低下させます。

于 2009-07-29T15:22:44.500 に答える