Ho bisogno di una log
funzione per JavaScript, ma deve essere base 10. Non riesco a vedere alcun elenco per questo, quindi presumo che non sia possibile. Ci sono maghi matematici là fuori che conoscono una soluzione per questo?
Ho bisogno di una log
funzione per JavaScript, ma deve essere base 10. Non riesco a vedere alcun elenco per questo, quindi presumo che non sia possibile. Ci sono maghi matematici là fuori che conoscono una soluzione per questo?
Risposte:
Formula / identità "Cambio di base"
Il valore numerico per il logaritmo in base 10 può essere calcolato con la seguente identità.
Dato che Math.log(x)
in JavaScript restituisce il logaritmo naturale di x
(uguale a ln (x) ), per base 10 è possibile dividere per Math.log(10)
(uguale a ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
è una costante pre-calcolata incorporata per Math.log(10)
, quindi questa funzione è sostanzialmente identica a:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Puoi semplicemente dividere il logaritmo del tuo valore e il logaritmo della base desiderata, inoltre puoi ignorare il Math.log
metodo per accettare un argomento di base opzionale:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
la risposta qui causerebbe un evidente problema di precisione e non è affidabile in alcuni casi d'uso
> 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));
}
Quindi puoi farlo
Math.log10(your_number);
NOTA: inizialmente ho pensato di fare Math.prototype.log10 = ...
questo, ma l'utente CMS ha sottolineato che la matematica non funziona in questo modo, quindi ho modificato la .prototype
parte.
.prototype
parte;)
FF 25+ supporta un Math.log10
metodo. È possibile utilizzare polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN elenca i browser supportati .
Browser desktop
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Browser mobili
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)
! 😁
La risposta migliore va bene per una base arbitraria, ma la domanda riguarda la base di registro 10 ed Math.log10(x)
è stata standard su tutti i browser dal 2015. *
* Tranne IE, se questo è importante per te per qualche motivo.
Se si dispone di un numero x, l'utilizzo di Math.log(x)
sarebbe essenzialmente lnx.
Per convertirlo in una base diversa da e, è possibile utilizzare la seguente funzione:
function(x){ return Math.log(x)/Math.log(10); }
Per uso base 10 Math.log10()
.
Consulta i documenti su: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10