質問

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

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

役に立ちましたか?

解決

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

詳細については、 Direct3DとFPUをご覧ください

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top