it-swarm.com.de

Wie kann ich die Basis für Math.log () in JavaScript angeben?

Ich brauche eine log-Funktion für JavaScript, aber es muss Basis 10 sein. Ich kann dafür keine Auflistung sehen, daher gehe ich davon aus, dass dies nicht möglich ist. Gibt es da draußen mathematische Zauberer, die eine Lösung dafür kennen?

189
BigOmega

"Basiswechsel" Formel/Identität

Der numerische Wert für den Logarithmus zur Basis 10 kann berechnet werden mit der folgenden Identität.

 Logarithm for base 10


Da Math.log(x) in JavaScript den natürlichen Logarithmus von x zurückgibt (derselbe wie ln (x)), können Sie sich für Basis 10 durch Math.log(10) teilen (ebenso wie ln (10)):

function log10(val) {
  return Math.log(val) / Math.LN10;
}

Math.LN10 ist eine 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);
}
306
Peter

Einfach, einfach die Basis durch Teilen durch das Protokoll (10) ändern. Es gibt sogar eine Konstante, die Ihnen helfen kann

Math.log(num) / Math.LN10;

was ist das gleiche wie:

Math.log(num) / Math.log(10);
62
bramp

Sie können einfach den Logarithmus Ihres Werts und den Logarithmus der gewünschten Basis aufteilen. Sie können auch die Methode Math.log ü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);
48
CMS

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
14
Royce Chao
Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

Dann kannst du es tun

Math.log10(your_number);

NOTE: Anfangs dachte ich, Math.prototype.log10 = ... zu tun, aber der Benutzer CMS wies darauf hin, dass Math auf diese Weise nicht funktioniert. Deshalb habe ich den .prototype-Teil herausgeschnitten.

11
artlung
Math.logBase = function(n, base) {
    return Math.log(n) / Math.log(base);
};
10
Yukulélé

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
8
Ivan Black

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 Standard in allen Browsern seit 2015. *

* Außer IE, wenn Ihnen das aus irgendeinem Grund wichtig ist.

0
Haumed Rahmani

Wenn Sie eine Zahl x haben, wäre die Verwendung von Math.log(x) 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); }
0
Kartik Singh