- 此问题在此处已有答案**:
Why do I get "OverflowError: (34, 'Result too large')" or "OverflowError: (34, 'Numerical result out of range')" from floating-point exponentiation?(6个答案)
6小时前关门了。
我必须在程序中处理非常大的整数,但是我得到了以下错误:
Traceback (most recent call last):
File "[path]", line n, in <module>
number = int(numbers[0]*(10**numbers[1]))
OverflowError: (34, 'Numerical result out of range')
当我输入8e10000000作为n时。
有什么办法可以解决这个问题吗?先谢了。
3条答案
按热度按时间4c8rllxm1#
数字
8e10000000
不是整数,对Python来说它是一个浮点数。任何使用e
符号的数字都被视为浮点数。Python(通常)使用64位浮点格式,它不能容纳这么大的数字。所以问题不在于整数,而在于你开始时的浮点数,错误不在
number = int(n)
行,它在n = 8e10000000
行,或者你使用的任何等价的行。您可以使用以下命令来避免该错误
这将得到一个整数。但是要小心--在RAM中构建整数需要花费大量的时间和内存。(我的系统花了19秒来执行那个命令。)如果你试图打印那个值,计算机将花费 * 非常长的时间 * 和大量的内存来构建要打印的字符串值。
最后,正如其他人所指出的,您声明的语句与错误消息不匹配。因此,可能发生了其他事情。如果您希望我们关闭,请显示显示显示该错误的完整代码片段。
uwopmtnx2#
8e10000000
是一个非常大的数,Python将其表示为一个浮点数。CPython通常以64位大小存储这个浮点数,对于这么大的数字来说太小了。
对于如此大的数字,使用
Decimal
模块是安全的:输出:
数字9223372036854775807正好是2^63 - 1。
xkrw2x1b3#
您遇到的问题是python是 * 强类型 *,但也是 * 动态类型 *。8e10000000实际上属于python(和C)类型
float
,并且是双精度浮点二进制表示的有效值,而pythonint
的最大有效值是9,223,372,036,854,775,807(在sys.maxint
中找到)。所以,python有一个
decimal
库,它有一个decimal.Decimal
documentation here类,可以处理任意精度的数字,它不会像内存和速度一样高效,但是它绕过了浮点数的大小限制和精度问题,特别是在处理货币时。如果你真的使用了int值,你可以考虑的另一个选择是在python 2.5+中使用
long(n)
将你的变量转换成一个任意大的整数(在python 3.0+中int
是一个long
)这里有一个PEP 237的链接。