2012-11-09 85 views
2

假設我有一個程序與功能長整型太大,轉換成浮動

def fakultaet(x): 
    if x>1: 
     return(x* fakultaet(x-1)) 
    else: 
     return(1) 

返回給定數的階乘,我需要計算

1.0/fakultaet(200) 

,但我得到的溢出錯誤:long int too large to convert to float

我該如何解決這個問題?

+1

樣式註釋:'return'是一個語句,而不是一個函數,因此您通常不會在返回的對象周圍編寫括號。你會寫'return x * fakultaet(x-1)'和'return 1'。請參閱Python文檔中的隨機示例:http://docs.python.org/dev/tutorial/controlflow.html#default-argument-values – jorgeca

回答

5

你可以試試這個:

from decimal import Decimal 

def fakultaet(x): # as you have it currently 
    if x>1: 
     return(x * fakultaet(x-1)) 
    else: 
     return(1) 

print Decimal(1.0)/fakultaet(200) 

輸出:

1.267976953480962421753016371E-375 

哦,還有,還有就是math模塊中的factorial功能已經,只是包括from math import factorial頂部的文件來獲得訪問權限。

+0

這是一個可笑的小數字,因爲200!是一個可笑的大數目。 :) – hobbs

+0

@hobbs準確地說,這就是爲什麼你需要明確地使用'Decimal'類(你不能只用'float'來進行分類)。 – arshajii

+0

事實上,如果OP能夠使用浮點數,那麼他最終可能會以0結束。 – pydsigner