Python float 溢出,float 溢出时会发生什么?

use*_*606 4 python integer-overflow

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

x=sys.float_info.max
x=x+1
x
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 7

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

print sys.float_info.max+1==sys.float_info.max
Run Code Online (Sandbox Code Playgroud)

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

x+0.00000000000000001E308
Run Code Online (Sandbox Code Playgroud)

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