6

いくつかのCコードも呼び出すC#で記述されたアプリケーションがあります。C#コードは、入力としていくつかのdoubleを取得し、それに対していくつかの計算を実行し、それに対して独自の計算を実行するネイティブレイヤーに渡し、次にC#レイヤーに戻します。

異なるマシンで同じexe/dllを実行した場合(それらはすべてIntelによるx64です)、得られる最終結果が異なるマシンで異なる可能性はありますか?

4

3 に答える 3

4

同じ実行可能ファイルを使用する場合、結果は同じになるはずです。ただし、浮動小数点の計算は通常、多数の永続的な設定(無限モード、丸めモードなど)によって高度にカスタマイズ可能であることに注意してください。これは、同じ浮動小数点命令が、現在の設定の組み合わせに応じて異なる結果を生成する可能性があることを意味します。アプリケーションで、実行の開始時にこれらすべての設定が同じ値にリセットされていることを確認した場合、結果は同じになります。ただし、これらの設定の一部がリセットされない場合、または外部パラメーター(環境変数など)に依存する場合は、状況によっては、異なるマシンで異なる結果が観察される可能性があります。

于 2010-02-25T17:56:31.193 に答える
0

ハードウェア自体は、IEEE浮動小数点演算を実装していると仮定すると、すべて同じ方法で実行する必要があります。ほとんど(すべて?)が実行していると思います。

http://en.wikipedia.org/wiki/IEEE_754-2008

于 2010-02-25T16:24:27.997 に答える
0

doubleの定義と同様に、最新のハードウェアのほとんどは標準化されています。各変数のメモリフットプリント(たとえば、sizeof(x))をチェックすることで、両方が同じタイプを使用していることを確認できます。

また、float.hでポーリングするための情報も必要です。

私が覚えていることから、intは一貫性の点でより問題になる傾向があります。デフォルトで2バイトになっているものもあれば、4バイトになっているものもありますが、サイズを確保するために常にlongを使用できます。

于 2010-02-25T17:33:12.310 に答える