.NET での確定的な結果を得るために浮動小数点計算を強制する
.NET のマシン間で一貫した結果を追求することを原動力として、開発者は取り組んでいます。浮動小数点の決定論への挑戦。 Java の FPstrict のような組み込みソリューションがなければ、この問題は克服できないようです。面倒な固定小数点演算に頼る人もいれば、明示的なキャストの可能性を探求する人もいます。
CLR エンジニアの David Notario 氏が示唆しているように、すべての浮動小数点演算の後に明示的なキャストを挿入すると、予測可能な動作が得られる可能性があります。ただし、Eric Lippert 氏は、C# コンパイラはランタイムに絞り込みを可能にする「ヒント」を与えるだけであると警告しています。このヒントが必要な IL 変換に変換されるかどうかは依然として不明です。
C# 仕様と CLR 仕様を詳しく調べると、次のことが確認されています。
これにもかかわらず、明示的なキャストだけではマシン間での再現性を保証するには不十分です。 CLR を使用すると、中間計算中に結果をより高精度の FPU レジスタに格納できる可能性があります。静的フィールドまたは配列要素に代入すると、切り捨てが強制される可能性もあります。
FPU 設定などの他の要因によっても変動が生じる可能性があります。真に再現可能な演算を保証するために、開発者は代わりに整数の使用を検討することをお勧めします。
以上が.NET で決定論的な浮動小数点の結果を実現するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。