2016-12-14 67 views
0
import math 
    if n < 0: 
     raise ValueError("n must be >= 0") 
    if math.floor(n) != n: 
     raise ValueError("n must be exact integer") 
    if n+1 == n: # catch a value like 1e300 
     raise OverflowError("n too large") 
    result =1; 
    factor =2; 

    while factor <=n: 
     result *= factor 
     factor += 1 

    return result 

這是一個因子函數。我不明白「如果n + 1 == n:」,那麼它表示一個'太大整數'異常。這是爲什麼?Python中的溢出錯誤檢查

+0

'float'類型有一個精度問題。 Python'int'不。 '1e16 == 1e16 + 1'由於精度損失而成爲'True',但'10000000000000000 == 10000000000000001'爲真,儘管它們在視覺上是相同的。 Python整數只受可用內存的限制。最好檢查用戶輸入的是整數而不是浮點數。 –

回答

0

Python對可以使用的數字大小有限制。從概念上講,如果Python的最大數量是10,000,並且輸入的數字是10,001,Python會將該數字截斷爲10,000,因此num == num+1

以下是更多詳細信息的更好回答:What is the maximum float in Python?

+0

截斷是一個明智的方式來表示太多的數字。 Java不以這種方式工作。 – user697911