10 Stimmen

log(1+x) ist zu log1p wie log(1-x) zu?

<math.h> bietet eine genauere Methode zur Berechnung der log(1+x) para double s.

Gibt es eine ähnlich präzise Methode zur Berechnung der log(1-x) ?

Der Grund für meine Frage ist, dass ich versuche, im logarithmischen Raum zu arbeiten, um eine höhere Genauigkeit zu erreichen (ich multipliziere und summiere hauptsächlich Zahlen, die sehr nahe bei Null liegen). Ich fand es einfach, eine Funktion zu schreiben, die Folgendes liefert log( exp(log_of_a) + exp(log_of_b) ) = log( a + b ) durch die Verwendung von log1p . Ich versuche, eine ähnliche Funktion für den Unterschied zu schaffen:

log( exp(log_of_a) - exp(log_of_b) ) = log( a - b ) donde a > b natürlich.

Grundsätzlich gilt: Solange weder log_a o log_b == -inf sollte die Funktion einfach zurückkehren:

return log( 1 - exp(log_b-log_a) ) + log_a;

In meinem log_add Funktion, erhalte ich am Ende eine log( 1 + ... ) und deshalb verwende ich log1p . Aber hier habe ich log( 1 - ... ) . Nur für den Fall, ich habe sogar gegoogelt log1m, aber kein Glück ...

Wenn das Argument x liegt in dem Bereich [-inf, 1) dann könnte ich einfach Folgendes verwenden log1p(-x) (angesichts meiner Behauptung a > b ).

Ist das die mejor wie man das Problem lösen kann? Ich habe das Gefühl, dass ich eine Arbeit mache, die schon einmal gemacht wurde...

Ich wäre Ihnen wirklich dankbar, wenn Sie mir helfen könnten, möglichst genaue Ergebnisse zu erzielen (oder mir erklären könnten, warum ich keine genaueren Ergebnisse erzielen kann).

17voto

StilesCrisis Punkte 15626

@Raymond Chen liegt goldrichtig: "Die Negation von Fließkommazahlen ist exakt, also log1p(-x) ist so genau wie log1p(x) ." Ich mache daraus einfach eine richtige Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X