Seite 1 von 1

Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 09:45
von Curiosa
Hallo!
Ich wuerde mich sehr ueber Eure Hilfe freuen, da ich schon seit gestern ohne Erfolg nach einer Loesung suche.
Ich benutze die Funktion math.exp. In meinem Fall sind die Zahlen, auf die ich sie anwende leider sehr, sehr klein. Deshalb erhalte ich als Ergebnis immer null.
Gibt es die Moeglichkeit die Genauigkeit heraufzusetzen oder gibt es eine andere Exponentialfunktion, die genauer ist?
Vielen Dank schon einmal fuer Eure Hilfe!
Viele Gruesse,
Curiosa

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 10:55
von BlackJack
@Curiosa: Also ich erhalte bei sehr kleinen Werten 1 und nicht 0!?

Code: Alles auswählen

In [300]: math.exp(0)
Out[300]: 1.0

In [301]: math.exp(1e-200)
Out[301]: 1.0

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 10:59
von Curiosa
Ich meine nicht vom Betrag her klein, sondern negative Zahlen.

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 11:17
von mushroom
Hmm, also wenn ich dich dann richtig verstanden habe, meinst du sehr große negative Zahlen. Ich erhalte für x = 744 ein nicht Nullergebnis

Code: Alles auswählen

>>> math.exp(-744)
9.8813129168249309e-324
Das Ergebnis ist wirklich schon mächtig klein und quasi Null. Wofür brauchst du denn solch kleine Zahlen?

Laut http://docs.python.org/library/math.html gibt es ab Version 2.7 wohl expm1(), was die Genauigkeit erhöhen soll. Habe selbst nur Version 2.6 und kann es daher nicht testen.

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 11:25
von Darii
Curiosa hat geschrieben:Ich meine nicht vom Betrag her klein, sondern negative Zahlen.
Evtl. hilft decimal.Decimal

Code: Alles auswählen

from decimal import Decimal
print Decimal(-10000).exp()

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 11:33
von mushroom
Da muß man dann nur darauf achten, daß Ergebnis richtig zu interpretieren:

Code: Alles auswählen

>>> from decimal import Decimal
>>> Decimal(-744).exp()
7.671944704179979073949774304E-324
>>> math.exp(-744)
9.8813129168249309e-324

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 18:07
von Darii
mushroom hat geschrieben:Da muß man dann nur darauf achten, daß Ergebnis richtig zu interpretieren:
Hättest du auch die Güte, uns den Grund deines Einwandes zu erklären? Decimal rechnet nämlich richtig. So zwei erläuterungsfrei hingeklatschte Zahlen helfen keinem.

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 18:16
von mushroom
Darii hat geschrieben:Hättest du auch die Güte, uns den Grund deines Einwandes zu erklären? Decimal rechnet nämlich richtig. So zwei erläuterungsfrei hingeklatschte Zahlen helfen keinem.
Naja viel zu erläutern gibt es nicht wirklich bei meinen "dahingeklatschten" Ergebnissen. Sie wurden eben auf meinem Rechner so berechnet, wie sie da stehen.
Inwieweit Decimal richtig rechnet, kann ich nicht beurteilen, genauso wenig wie math richtig rechnet. Was macht denn Decimal anders als math?

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 18:24
von Darii
mushroom hat geschrieben:Naja viel zu erläutern gibt es nicht wirklich bei meinen "dahingeklatschten" Ergebnissen. Sie wurden eben auf meinem Rechner so berechnet, wie sie da stehen.
Inwieweit Decimal richtig rechnet, kann ich nicht beurteilen, genauso wenig wie math richtig rechnet.
Dein Satz klang halt so als wüsstest du was da vor sich geht und dass du es dem Leser überläßt da selbst drauf zu kommen.
Was macht denn Decimal anders als math?
Grob gesagt, Decimal macht die Rechnung "per Hand" während math auschließlich mit normalen Fließkommazahlen rechnet. Die Abweichung sind dann einfach Rundungsfehler.

Re: Genauigkeit von math.exp

Verfasst: Dienstag 8. März 2011, 18:28
von mushroom
Nee nee, bin Anfänger in Python, habe mit meinem Projekt zwar schon gute Fortschritte gemacht, aber wenn jemand von den Experten hier über meinen Code schaut, wird er sich wohl die Hände über dem Kopf zusammenschlagen :-)

Will mich nur an dem Forum etwas aktiver beteiligen, dadurch lernt man ja auch dazu.