在C#中:
Console.WriteLine(1.2d - 1.0d);
生成0.2
。在python 3中:
print(1.2 - 1.0)
生成0.19999999999999996
。
我的目标是在C#中编写快速代码,产生与python 3相同的浮点结果。我对任何和所有浮点运算都很感兴趣,而不仅仅是上面的例子。
实现这一目标最实际的方法是什么?我有可以使用的图书馆吗?
另外,我想了解一下,有什么能说明这种差异。两种表示都是64位,两者似乎都基于IEEE。那些使这些实现产生不同结果的实现有什么不同呢?
参考文献:
答案 0 :(得分:0)
正如Jon Skeet在评论中指出的那样,你需要比较位表示。在C#中尝试这个:
Console.WriteLine($"{BitConverter.DoubleToInt64Bits(1.2d - 1.0d):X}");
结果:3FC9999999999998
。
现在在python 3中(由this answer提供):
import struct
import binascii
print(binascii.hexlify(struct.pack('>d', (1.2 - 1.0))).decode())
结果:3fc9999999999998
如您所见,结果是一样的。