Ich benötige eine log
Funktion für JavaScript, aber es muss Basis 10 sein. Ich kann keine Auflistung dafür sehen, daher gehe ich davon aus, dass dies nicht möglich ist. Gibt es da draußen Mathe-Assistenten, die eine Lösung dafür kennen?
Ich benötige eine log
Funktion für JavaScript, aber es muss Basis 10 sein. Ich kann keine Auflistung dafür sehen, daher gehe ich davon aus, dass dies nicht möglich ist. Gibt es da draußen Mathe-Assistenten, die eine Lösung dafür kennen?
Antworten:
Formel / Identität "Basiswechsel"
Der numerische Wert für den Logarithmus zur Basis 10 kann mit der folgenden Identität berechnet werden.
Da Math.log(x)
in JavaScript der natürliche Logarithmus von x
(wie in ln (x) ) zurückgegeben wird, können Sie für Basis 10 durch Math.log(10)
(wie in ln (10) ) dividieren :
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
ist eine eingebaute vorberechnete Konstante für Math.log(10)
, daher ist diese Funktion im Wesentlichen identisch mit:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Sie können einfach den Logarithmus Ihres Werts und den Logarithmus der gewünschten Basis teilen. Außerdem können Sie die Math.log
Methode überschreiben , um ein optionales Basisargument zu akzeptieren:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
Die Antwort hier würde ein offensichtliches Präzisionsproblem verursachen und ist in einigen Anwendungsfällen nicht zuverlässig
> Math.log(10)/Math.LN10
1
> Math.log(100)/Math.LN10
2
> Math.log(1000)/Math.LN10
2.9999999999999996
> Math.log(10000)/Math.LN10
4
(Math.round(Math.log(1000) / Math.LN10 * 1e6) / 1e6)
const logBase = (n, base) => Math.log(n) / Math.log(base);
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
Dann können Sie tun
Math.log10(your_number);
HINWEIS: Anfangs dachte ich, dies Math.prototype.log10 = ...
zu tun, aber Benutzer CMS wies darauf hin, dass Math nicht auf diese Weise funktioniert, und habe das .prototype
Teil herausgeschnitten.
.prototype
Teil;)
FF 25+ unterstützt eine Math.log10
Methode. Sie können Polyfill verwenden:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN listet die unterstützten Browser auf .
Desktop-Browser
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Mobile Browser
Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Not supported Not supported 25.0 (25) Not supported Not supported iOS 8
Math.log10(x)
! 😁
Die beste Antwort ist für eine beliebige Basis in Ordnung, aber die Frage bezieht sich auf die Protokollbasis 10 und Math.log10(x)
ist seit 2015 in allen Browsern Standard. *
* Außer IE, wenn Ihnen das aus irgendeinem Grund wichtig ist.
Wenn Sie eine Zahl x haben, Math.log(x)
wäre die Verwendung von im Wesentlichen lnx.
Um es in eine andere Basis als e zu konvertieren, können Sie die folgende Funktion verwenden:
function(x){ return Math.log(x)/Math.log(10); }
Für Basis 10 verwenden Math.log10()
.
Siehe Dokumente unter: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10