<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).