>>> 1e100000000
inf
>>> 1000000 ... [400 zeroes snipped] ... 000000
1000000 ... [400 zeroes snipped] ... 000000
>>> 1000000 ... [400 zeroes snipped] ... 000000.0
inf
Python为什么决定大浮点数是无限的?如果表示不能表示该值,我希望它会给出错误,如下所示:
>>> 10.0 ** 1000000000000000000000000000000000000000000000000000000
OverflowError: (34, 'Numerical result out of range')
如果第二个案件投诉,为什么第一个案件保持沉默?
因为您试图创建一个浮点数,该浮点数大于浮点值可表示的最大值。
见sys.float_info
命名的元组; sys.float_info.max
是在这些值中可表示的最大值。与Python整数不同,Python浮点数的上限由操作系统和硬件平台确定,整数受可用内存限制。
在我的Mac上,最大值为:
>>> import sys
>>> sys.float_info.max
1.7976931348623157e+308
因此,具有308个零的1是可表示的,但是具有这么多个零的2则不是:
>>> float('1' + '0' * 308)
1e+308
>>> float('2' + '0' * 308)
inf
浮点数有限,因为浮点算术通常由CPU上的浮点单元处理,而Python的浮点类型则限于该硬件可以处理的类型。
定义浮点文字与将算术应用于浮点值是不同的操作。前者在编译时确定,后者在运行时确定。文字只能产生一个SyntaxError
异常,而在运行时您可以引发其他异常。但是,对于在其他平台上仍然有效的float文字抛出语法错误并不是一个真正的选择,因此,您得到的float('inf')
不是异常。
浮点文字的允许范围取决于实现。
在float('inf')
某些情况下,计算也会返回,因为一旦达到无穷大,计算就很容易了(大多数情况下只是给您一种无穷大的形式),但是接近无穷大则会出现溢出。该浮幂实施简单地使用Çpow()
功能,当该功能报告溢出抛出异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句