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.max
是 1.7976931348623157e+308
使用以下代码进行测试时:
for a in range(300):
x = float("1.0e"+str(a))
if x != x+1:
print(x)
事实证明,由于 significand.
的范围有限,递增对超过 1e+15
的数字不起作用
我正在查看下面代码的输出。当我将 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.max
是 1.7976931348623157e+308
使用以下代码进行测试时:
for a in range(300):
x = float("1.0e"+str(a))
if x != x+1:
print(x)
事实证明,由于 significand.
的范围有限,递增对超过1e+15
的数字不起作用