如果我的机器上运行该语句更改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”)'。如果我的怀疑是正确的,你也会看到不同的结果。 –