使用WinPython 3.4.4.2,我得到以下奇怪的结果:
>>> 2**-1075
5e-324
即,与2**-1074
相同,而2**-1075
在双浮点表示中应为零。在地址https://www.python.org/shell/的Python 3.5.1中,我按预期得到0。
愿任何人帮我理解出了什么问题吗?
谢谢
答案 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。