Python float溢出,float溢出会怎样?

Python float overflow, what happens when float overflows?

我正在查看下面代码的输出。当我将 1 递增到 float 的最大值时,输出似乎是我所期望的,但是当我执行 x=x*1.5 时,我将 inf 视为我认为是 float 溢出的输出。我的问题是,从预期输出到 inf 的上限是多少?

x=sys.float_info.max
x=x+1
x

Python 浮点数没有足够的精度来存储 sys.float_info.max+ 1,因此操作实际上等同于加零。下面的对比其实是returnsTrue:

print sys.float_info.max+1==sys.float_info.max

只有当您开始添加足够大的数字以导致该浮点数的 IEE754 二进制表示发生变化时,您才会得到 inf,例如:

x+0.00000000000000001E308

returns inf 在我的机器上(Windows 64 位)

我没有足够的声誉来评论 Alex 给出的出色答案,但我认为这可能会误导人们带着不同的问题来到这里,他们正在寻找递增停止工作时的极限通常(即停止实际递增),实际上要低得多。

在我的机器上当前 Python sys.float_info.max1.7976931348623157e+308

使用以下代码进行测试时:

for a in range(300):
  x = float("1.0e"+str(a))
  if x != x+1:
    print(x)

事实证明,由于 significand.

的范围有限,递增对超过 1e+15 的数字不起作用