2017-03-31 71 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