【问题标题】:Python float overflow, what happens when float overflows?Python浮点溢出,浮点溢出会发生什么?
【发布时间】:2023-03-16 07:03:01
【问题描述】:

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

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

【问题讨论】:

  • 我认为确实没有一致的限制。 x ** 2 收到错误,但 x * x 没有。
  • @zondo - 嗯,有一个一致的限制,即 IEE754 浮点数可以表示的最大值。
  • 我不清楚问题是什么。您是否要求sys.float_info.max + xinf 的最低x
  • @DSM 是的,但我认为根据 Jaco 的回答没有明确的价值。

标签: python integer-overflow


【解决方案1】:

Python 浮点数没有足够的精度来存储 + 1sys.float_info.max,因此这些操作实际上相当于加零。下面的比较实际上返回True

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

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

x+0.00000000000000001E308

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

【讨论】:

  • 谢谢!我就是这么想的,就是想得到一个确定的答案。
【解决方案2】:

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

在我使用当前 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 的数字,递增停止工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多