如果我的機器上運行該語句更改Math.Exp或雙實施.NET 4.5.2
Math.Exp(113.62826122038274).ToString("R")
安裝.NET 4.5.1,然後我得到的答案
2.2290860617259248E+49
但是,如果我的機器上運行相同的命令與安裝了.NET Framework 4.5.2,然後我得到的答案
2.2290860617259246E+49
(即最終d igit變化)
我意識到,這是純粹的數字大致而言微不足道,但沒有人知道的已經在.NET 4.5.2可以解釋的變化作出任何改變?
(我沒有一個結果,更喜歡其他的,我只是有興趣瞭解爲什麼它已經改變)
如果我輸出
The input in roundtrip format
The input converted to a long via BitConverter.DoubleToInt64Bits
Math.Exp in roundtrip format
Math.Exp converted to a long via BitConverter.DoubleToInt64Bits
然後在4.5.1,我得到
113.62826122038274
4637696294982039780
2.2290860617259248E+49
5345351685623826106
和4.5.2,我得到:
113.62826122038274
4637696294982039780
2.2290860617259246E+49
5345351685623826105
因此,對於完全相同的輸入,我得到一個不同的輸出
更多細節(這可以從比特所以沒有往返格式參與可以看出):
編譯一次使用VS2015
這兩款機器我正在運行的二進制文件是64位
一個已安裝.NET 4.5.1,其他4.5.2
只是爲了清晰:字符串轉換是不相關的。我得到的結果REGA變化無論是否涉及字符串轉換。我提到純粹是爲了展示變化。
也安裝了net46嗎? – Dbl
@AndreasMüller - 不,只是4.5.2,雖然4.6顯示了與4.5.2相同的答案 - 更改似乎是由4.5.2引入的,而不是4.6 –
您是否正在編譯每臺機器上的代碼?如果是這樣,其中一個使用Roslyn,另一個使用「舊」編譯器?這可以解釋事情 - 但爲了減少事情,我建議刪除'Math.Exp'調用,並打印出'113.62826122038274.ToString(「R」)'。如果我的懷疑是正確的,你也會看到不同的結果。 –