1

おそらくこれはばかげた質問かもしれませんが、最近強制されるまで、私はそれについて考えたことはありませんでした.

プログラムがまったく同じ状態で初期化され、初期化されていない変数の方法で未定義の動作がないと仮定します。CPU のレジスタの状態は、コード実行前とは異なる場合があります。異様なビット フリッピングを引き起こす外部現象はないと仮定します。

数値計算の同じシーケンスは常に同じ結果を生成しますか? 言い換えれば、数値誤差は決定論的ですか?

編集: ポインター アドレスが毎回異なる可能性があることはわかっていますが、ポインター アドレスを計算で使用しないように抽象化しましょう。

4

1 に答える 1

3

正式には「いいえ」ですが、実際にはほとんど「はい」です。そのため、DLL のバグが原因で他のプログラムが再現不可能な結果を​​示すと、人々は非常に腹を立てました。

私が考えていた特定のケースには、コンピューター上のすべてのプロセスに読み込まれる DLL が含まれていました。正確な理由は覚えていませんが、ある種のインプット メソッド エディタ (非 ASCII 言語でよく使用される) だったと思います。この特定の DLL はいくつかの浮動小数点計算を行い、浮動小数点の丸めモードを変更しました! .

于 2016-07-28T15:19:20.960 に答える