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 vonfloat
istsys.float_info.max
, die ich Wette, der ist etwa 10^308 auf Ihrem system. - Sie können die Berechnung der
a
s 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, umfloat
) unabhängig von der input-Wert. Wenn Sie teilen einfloat
durch eine ganze Zahl, Python versucht zu konvertieren integer zu float. Es fehlschlägt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine mögliche Umsetzung:
Dies ist nur für das zeichnen:
Leidet Sie unter numerische Instabilität und Unterlauf, da nach einer Weile (~100 loops, dependig auf
x
)a
wird, wird zu 0.richtige Antwort von Sinus taylor-Reihe
y += ...
in der Schleife. Ansonsten, abgesehen von ein paar Tippfehler, es sieht gut aus.