我有一些代碼行爲奇怪,似乎是四捨五入的結果增加了兩個雙值。這是我的代碼造成的問題。雙加法結果被舍入
不幸的是,我不能解決這個問題,因爲我的單元測試環境工作正常(不捨入),我的應用程序不正確(舍入)。
在我的測試環境:
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,順便說一句)
編輯(從評論)
我通過使用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配置的庫引起的。
對於任何人誰是好奇這是什麼意思我: 我能夠緩解這個問題對於我特定的代碼,通過做一些假設,我的輸入值,做四捨五入這反過來又使我有些搶佔值計算一致。
你怎麼知道實際值被四捨五入,而不僅僅是顯示? –
你有一些代碼來「分享」? – lboshuizen
什麼是變量定義爲?由於變量的選擇,「b + a」可能會變成2DP ... – MoonKnight