Mit der exp () Funktion, wie implementiert man die ln () Funktion?

7

Ich kam über diese Frage, als ich in einem CS Vorstellungsgespräch war. Ich habe keine Ahnung davon, geschweige denn, den Code zu implementieren ......

Könnte ich ein paar Tipps bekommen?

P.S. exp () ist die Funktion y = e ^ x und ln () ist y = ln (x)

    
mitcc 28.03.2014, 06:51
quelle

3 Antworten

12

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)

    
Nikunj Banka 28.03.2014, 07:16
quelle
8

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.

    
user515430 28.03.2014 08:49
quelle
5

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 .

%Vor%

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.

    
Salix alba 28.03.2014 07:35
quelle

Tags und Links