Python:为什么足够大的浮点值无限?

Eli*_*ICA 3 python floating-point

>>> 1e100000000
inf
>>> 1000000 ... [400 zeroes snipped] ... 000000
1000000 ... [400 zeroes snipped] ... 000000
>>> 1000000 ... [400 zeroes snipped] ... 000000.0
inf
Run Code Online (Sandbox Code Playgroud)

为什么Python决定大浮点数是无限的?如果表示不能表示该值,我希望它会给出错误,如下所示:

>>> 10.0 ** 1000000000000000000000000000000000000000000000000000000
OverflowError: (34, 'Numerical result out of range')
Run Code Online (Sandbox Code Playgroud)

如果第二个案件抱怨,为什么第一个案件是沉默的?

Mar*_*ers 5

因为您尝试创建的浮点数大于浮点值中可表示的最大值.

看到sys.float_info命名的元组 ; sys.float_info.max是这些值中可表示的最大值.与Python整数不同,Python浮点数的上限由您的操作系统和硬件平台决定,整数受可用内存的限制.

在我的Mac上,最大值是:

>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308
Run Code Online (Sandbox Code Playgroud)

所以带有308个零的1是可表示的,但是带有那么多零的2不是:

>>> float('1' + '0' * 308)
1e+308
>>> float('2' + '0' * 308)
inf
Run Code Online (Sandbox Code Playgroud)

浮点数是有限的,因为浮点运算通常由CPU上的浮点单元处理,而Python的浮点类型仅限于该硬件可以处理的内容.

定义浮点文字是将算术应用于浮点值的不同操作; 第一个是在编译时确定的,后者是在运行时确定的.文字只能产生SyntaxError异常,而在运行时你可以抛出其他异常.但是抛出其他平台上仍然有效的浮点文字的语法错误实际上并不是一个选项,所以不是你得到的异常float('inf').

浮点文字Python规范仅声明允许的范围是依赖于实现的:

允许的浮点文字范围取决于实现.

有一个点,计算也会返回,float('inf')因为一旦你达到无穷大计算很容易(大多数情况只是给你一种无穷大的形式),但接近无穷大你会得到溢出.该浮幂实施简单地使用Ç pow()功能,当该功能报告溢出抛出异常.