Python用科学计数法表示5.26E-325是0,而5.26E-324是5e-324,为什么?

Python uses the scientific notation to show that 5.26E-325 is 0,but 5.26E-324 is 5e-324,why?

我用这段代码来测试科学记数法:

a = 5.26E-324
print(a)

a = 5.26E-325
print(a)

代码结果:

5e-324
0.0

问题:

  1. 为什么5.26E-325不能显示5e-325
  2. 这是否意味着小于 E-324 显示为 0.0
  3. 有没有办法显示5e-325

估计是双精度因素,

运行 在您的 python 控制台中执行这些命令:

>>> import sys
>>> sys.float_info

在 python 2.7 中它用于 return:

sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53,
epsilon=2.2204460492503131e-16, radix=2, rounds=1)

它必须已更改为您在 python 3.x

中尝试的值

希望这对您有所帮助。

有关更多信息,请参阅 Python double precision examples

关于您是否在 python 中表示 5.26E-325 的问题:是的,使用 decimal 模块:

from decimal import Decimal
>>> Decimal("5e-324")
Decimal('5E-324')
>>> Decimal("5e-325")
Decimal('5E-325')
>>> Decimal("5e-100000")
Decimal('5E-100000')
>>> Decimal("5e-100000") + Decimal("5e-100000")
Decimal('1.0E-99999')

小数模块(据我所知)在指数方面没有限制,但在精度方面与浮点数类似。但是精度应该不是问题,因为你可以设置一个非常高的数字。

下面 post 中回答的另一个问题很好。

您可以按照 Akash Gupta 的建议使用 sys.float_info 检查 Python 的 floatinfo 设置。

但是,它并没有从 Py2.7 更改为 Py3+,因为可以通过 min representablefloating epsilon.

计算可表示的最小非规范化浮点数(大于零)

试试这个:

>>> import sys
>>> sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
>>> sys.float_info.min * sys.float_info.epsilon
5e-324

你会发现 5e-324 来自 2.22e-308 * 2.22e-16