使用 WinPython 3.4.4.2,我得到以下奇怪的结果:
>>> 2**-1075
5e-324
也就是说,与 相同2**-1074
,而2**-1075
在双浮点表示中应该为零。在地址https://www.python.org/shell/使用 Python 3.5.1 时,我得到了预期的 0。
有人可以帮助我了解发生了什么问题吗?
谢谢
使用 WinPython 3.4.4.2,我得到以下奇怪的结果:
>>> 2**-1075
5e-324
也就是说,与 相同2**-1074
,而2**-1075
在双浮点表示中应该为零。在地址https://www.python.org/shell/使用 Python 3.5.1 时,我得到了预期的 0。
有人可以帮助我了解发生了什么问题吗?
谢谢
大于和小于零的最小可重新表示的非规范化浮点数是: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/的控制台,它可能控制他们系统中的此类操作。
2**-1074 是最小的次正规浮点数。2**-1075 应该是 0.0,但在 Windows 上,由于 C pow() 函数的行为,它不是。有趣的是,2**-1074 / 2 将给出 0.0。而且 math.ldexp(1, -1075) 也会给出 0.0。