2017-03-31 123 views
4

我在尝试计算Python中的一个非常大的数字时出现错误。这里是我的代码:Python数学范围错误

# Where fourthNumber = 2790 
# and dee = 413 
emm = math.pow(fourthNumber, dee) 

一个我的错误是:

line 44, in <module> 
    emm = math.pow(fourthNumber, dee) 
OverflowError: math range error 

有没有解决这个错误的方法吗?我认为Python可以处理任意大的数字?或者我错了?任何帮助表示赞赏。谢谢!

+4

'2790 ** 413'作品...''math.pow(..)'更适用于浮点数。 –

回答

4

你可以处理任意大的整数数字; math.pow操作浮点数。

2790 ** 413> 1000 ** 413 = 1e + 1239,高于大约1e + 308的浮点范围。

使用**留在整数域,并获得您的巨大整数。

3

的内置pow作品与整数运算:

>>> pow.__module__ 
'__builtin__' 
>>> pow is math.pow 
False 
>>> pow(2790, 413) 
108276934... 
4

的问题是,math.pow(..)作品上浮点数。在Python 中浮点数不是任意大的。只有int s(在,long s在)。

但是,您可以使用**运营商这确实整数次幂(被给予的参数都是整数),如果这两个数是整数:

>>> 2790**413 
10827693458027068918752254513689369927451498632867702850871449492721716762882046359646654407147290095143376244612860740505063304616869045757879636651922242895944635094287526023557872050108996014618928707382416906723717536207944990935946477343103732942220495426003253324856391048675505527041527544249845903325107575822015010197006079682477544271998209608154757421132764034059289159228295810448568286783859864141487725512980856505994152145510660350938086763233208252511256291934375881870590480237727775536326670654123168787472077359939510018827829233028430183558108518520524567765780717109616748933630364200317687291046055118737587697510939517252245710306646155772831436013971724481443654932630319085588147436112198934867224850036968074130558127066188475740553149587714112808551835880666012903651859580234129805580074844684526620091506655345299434455806896837926335229779632528684030400890708579038639280240022309690038032176604539091205540422068492362106868171343650410145963283813864374487990607671475570427243900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

不过,若你其转换为float ,你会得到:

>>> float(2790**413) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
OverflowError: int too large to convert to float 

所以错误清楚地表明,不能处理这个大数作为float s。

-1

有可能是在数学库中的错误 - 之外,math.pow是一种多余的,你可以做fourthNumber ** dee代替

+3

这不是一个错误。 “2790 ** 413”的结果不能表示为浮点数。 –

0

威廉,**是math.pow不同

不像内置的**运算符math.pow()将其参数转换为float类型。使用**或内置的pow()函数来计算精确的整数幂。

如果你必须操纵巨大的数字,你也可以使用numpy。

+0

以什么方式,那不是我所说的......答案说“'math.pow'在浮动工作。”所以当然这意味着它首先*将它转换为浮动... –

+0

afaik numpy与64位数字一起工作,np.power(2790,413)警告发生溢出并返回-9223372036854775808,这是不正确的。 –

+0

对不起,我误解了你所说的内容:) – Gloria