Sie können den Wert in der Protokollierungszeit finden, indem Sie die Antwort binär durchsuchen. Dies ist möglich, weil Log X eine monoton steigende Funktion ist.
(mit freundlicher Genehmigung von WolframAlpha ) .
Wenn zum Beispiel der Wert, dessen Logarithmus wir berechnen müssen (angenommen, dass er X ist), größer als 1 ist, dann beginne mit einer Annahme von Antwort = X. Erhöhe die Leistung und beantworte, ob der Wert größer ist als oder kleiner als X. Jetzt, abhängig davon, ob der Wert, den Sie erhalten, größer oder kleiner als X ist, können Sie Ihre Grenzen verfeinern. Die Suche wird beendet, wenn Sie innerhalb eines angemessenen Bereichs Ihrer Antwort angekommen sind.
%Vor%Wenn der Wert von X kleiner als 1 ist, können Sie diesen Fall auf den Fall reduzieren, den wir bereits berücksichtigt haben, z. wenn X größer als 1 ist. Zum Beispiel wenn X = 0,04, dann
log 0.04 = log (4/100) = (log 4) - (log 100)
Wenn X positiv ist, kann der Logarithmus mithilfe der Newton-Methode gefunden werden.
X_ {0} = 0
X_ {n + 1} = X_ {n} - (exp (X_ {n}) - X) / (exp (X_ {n})
Sehr schnelle Konvergenz.
Anpassung diese Antwort , um X im Bereich [0, e] zu skalieren. Einige Dinge, die wir über ln(x)
, ln(x)
wissen, sind nur für 0 & lt; x, ln(1)=0
, die Ergebnisse können eine beliebige Zahl von -unendlich bis + unendlich sein. ln(x^a) = a * ln(x)
insbesondere ln(x^(-1)) = - ln(x)
, ln(X/e) = ln(X)-ln(e)
so ln(X) = ln(X/e) + 1
.
Wenn Sie die tatsächlichen Implementierungen mathematischer Funktionen in den Bibliotheken betrachten. Sie tun ziemlich viel Prescaling Arbeit, um die Bereiche der Eingabe einzuschränken, wahrscheinlich aggressiver als hier getan.