奇妙な動作をしているコードがあり、2 つのdouble値を加算した結果を丸めているようです。これは私のコードで問題を引き起こしています。
残念ながら、この問題を修正することはできません。なぜなら、私のユニット テスト環境は正常に動作しており (丸められていません)、アプリケーションは正常ではありません (丸められています)。
私のテスト環境では:
a = -3.7468700408935547
b = 525218.0
c = b + a
c = 525214.25312995911
私のアプリケーション内:
a = -3.7468700408935547
b = 525218.0
c = b + a
c = 525214.25
何が原因でしょうか? プロジェクト構成?(私はビジュアルスタジオを使用しています、ところで)
編集 (コメントから)
Visual Studio デバッガーを使用して同じコードをステップ実行しているため、まったく同じコードです。
もっとコードがありますが、問題をその特定の合計に絞り込みました。
各値のバイナリ表現は次のとおりです。
テスト環境:
System.BitConverter.ToString(System.BitConverter.GetBytes(a)) "00-00-00-00-97-F9-0D-C0" string
System.BitConverter.ToString(System.BitConverter.GetBytes(b)) "00-00-00-00-44-07-20-41" string
System.BitConverter.ToString(System.BitConverter.GetBytes(c)) "00-40-9A-81-3C-07-20-41" string
アプリケーション内:
System.BitConverter.ToString(System.BitConverter.GetBytes(a)) "00-00-00-00-97-F9-0D-C0" string
System.BitConverter.ToString(System.BitConverter.GetBytes(b)) "00-00-00-00-44-07-20-41" string
System.BitConverter.ToString(System.BitConverter.GetBytes(c)) "00-00-00-80-3C-07-20-41" string
編集2:
Alexei Levenkov が指摘しているように、この問題は FPU 構成を変更するライブラリによって引き起こされます。
これが私にとって何を意味するのか知りたい人のために: 入力値についていくつかの仮定を立て、いくつかのプリエンプティブな値の丸めを行うことで、特定のコードでこの問題を軽減することができました。これにより、計算が一貫したものになりました。