我試圖確定e的連續數字中的前10位數的素數,因此想要將e計算爲任意數量的小數點。這是我的代碼,但是當我輸入1000例如,它不能階乘轉換成浮動,因爲它太大了:如何解決int太長,以轉換爲浮動錯誤?
import math
def calculate_e(n):
e_real=0.0
e_test=0.0
accurate=False
term=1
while accurate==False:
e_real=sum(1/float(math.factorial(i)) for i in range(term))
if (e_real-e_test)<n:
accurate=True
else:
accurate=False
term+=1
e_test=e_real
return e_real
a=input("Enter accuracy: ")+1
b=10**(-a)
e=round(calculate_e(b),a)
print e
此外,另外我遇到的麻煩事正在打印這個數字沒有舍入的數字。假設我想查看e的前3位數字,我希望它輸出271,而不是272.我能夠提出的最好的方法是讓它精確到1位,並將它舍入到小數點後一位。
你可以看看[decimal](https://docs.python.org/2/library/decimal.html)模塊,雖然你會獲得性能上的提升(如果這對你很重要)。 – SethMMorton
可能的重複:http://stackoverflow.com/q/10056797 –
@LaurentLAPORTE雖然確實OP可能要使用該問題的答案中建議的函數,但我不確定它是否是重複的,因爲這問題是關於繞過浮動的限制,而不是計算浮動的階乘。 – SethMMorton