die Sünde mit der taylor-Reihe in python

Dies ist mein code :

import math    
x=float(( input ('x ? ' )))  
n  = 1000   #a big number 
b=0      
for i in range (n):    
   a=(((((-1)**i))*(x**((2*i)+1)))/(math.factorial((2*i)+1)))   
   b+=a     
print (b)

aber es funktioniert nicht und zeigt diesen Fehler:

"OverflowError: long int too large to convert to float"
  • Was ist die Frage? math.factorial(1999) ist zu groß, um eine Konvertierung in eine float. Es ist etwa 10^5733. Der max-Wert von float ist sys.float_info.max, die ich Wette, der ist etwa 10^308 auf Ihrem system.
  • Sie können die Berechnung der as mit Rekursion: a[i] = -a[i-1] x**2 / 2i / (2i + 1)
  • für examaple, wenn ich will berechnen Sie sin 30 mein input ist 0.523 . es zeigt aber, das "OverflowError: long int zu groß, zu konvertieren, zu schweben"
  • habt Ihr meinen letzten Kommentar hier ?!
  • Die Eingabe ist irrelevant, dein code berechnet factorial(1999) (sowie ein paar andere zahlen, die sind zu groß, um zu konvertieren, um float) unabhängig von der input-Wert. Wenn Sie teilen ein float durch eine ganze Zahl, Python versucht zu konvertieren integer zu float. Es fehlschlägt.
InformationsquelleAutor Hippo | 2013-11-14
Schreibe einen Kommentar