Python:最小的非规范化双重错误

时间:2016-07-10 17:21:41

标签: python double denormalized

使用WinPython 3.4.4.2,我得到以下奇怪的结果:

>>> 2**-1075
5e-324

即,与2**-1074相同,而2**-1075在双浮点表示中应为零。在地址https://www.python.org/shell/的Python 3.5.1中,我按预期得到0。

愿任何人帮我理解出了什么问题吗?

谢谢

2 个答案:

答案 0 :(得分:1)

最小且可重复的非规范化浮点数大于零且小于零: 5e-324 -5e-324

5e-324 是非规范化的最小值,可以通过将最小浮点数(2.2250738585072014e-308)与浮点epsilon(2.220446049250313e-16)相乘来实现。

import sys
print(sys.float_info.min*sys.float_info.epsilon) 

<强>输出:

5e-324

我在shell中也得到了相同的结果(Python 3.5.1)。地址https://www.python.org/shell/使用来自http://www.pythonanywhere.com/的控制台,该控制台可能会控制其系统中的此类操作。

答案 1 :(得分:0)

2 **-1074是最小的次标准浮点数。 2 **-1075应该为0.0,但是在Windows上,由于C pow()函数的行为,事实并非如此。有趣的是2 **-1074/2等于0.0。而且math.ldexp(1,-1075)也会给出0.0。