.NET double和python float有什么区别?

时间:2017-02-22 10:50:26

标签: c# python .net floating-point

在C#中:

Console.WriteLine(1.2d - 1.0d);

生成0.2。在python 3中:

print(1.2 - 1.0)

生成0.19999999999999996

我的目标是在C#中编写快速代码,产生与python 3相同的浮点结果。我对任何和所有浮点运算都很感兴趣,而不仅仅是上面的例子。

实现这一目标最实际的方法是什么?我有可以使用的图书馆吗?

另外,我想了解一下,有什么能说明这种差异。两种表示都是64位,两者似乎都基于IEEE。那些使这些实现产生不同结果的实现有什么不同呢?

参考文献:

1 个答案:

答案 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

如您所见,结果是一样的。