Hintergrund für das Folgende ist die Formel limes n->inf (1+x/n)^n = exp(x) mit x = 1 ergibt sich eine Nährung seltsamerweise taucht ein Sprung in der Approximation auf wenn n von 1e14 auf 1e15 um den Faktor 1000 wächst. octave.exe:19> dx=(1+1/1e14)^1e14 - exp(1) dx = -0.00217179437202208 octave.exe:20> dx=(1+1/1e15)^1e15 - exp(1) dx = 0.316753378090217 ok, könnte man die Idee haben, dass es ein Bug ist deswegen schnell in Python ausprobiert |4> import math |5> (1+1/1e14)**1e14 - math.exp(1) <5> -0.0021717943720220845 |6> (1+1/1e15)**1e15 - math.exp(1) <6> 0.31675337809021675 da beide auf C double stützen, ist eigentlich redundant es nochmal in C++ auszuprobieren. Was passiert da? Wird die Potenzierung 'naive' in einer Schleife durchmultipliziert, und dabei baut sich so ein grosser Fehler auf? Grüsse
Such dir mal ein Programm mit grösserer Rechengenauigkeit als IEEE double precision und probiers damit nochmal. Double hat ja von Haus aus nur 15-16 Dezimalstellen, und 1+1/1e15=1,000000000000001 sind 16 Dezimalstellen. M.a.W: Diese Formel nähert sich irgendwann nicht mehr exp(x) weil die Rechengenauigkeit dafür nicht ausreicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.