Necesito una log
función para JavaScript, pero debe ser la base 10. No puedo ver ningún listado para esto, así que supongo que no es posible. ¿Hay algún mago de las matemáticas que sepa una solución para esto?
Necesito una log
función para JavaScript, pero debe ser la base 10. No puedo ver ningún listado para esto, así que supongo que no es posible. ¿Hay algún mago de las matemáticas que sepa una solución para esto?
Respuestas:
"Cambio de base" Fórmula / Identidad
El valor numérico para el logaritmo a la base 10 se puede calcular con la siguiente identidad.
Como Math.log(x)
en JavaScript devuelve el logaritmo natural de x
(igual que ln (x) ), para la base 10 puede dividir entre Math.log(10)
(igual que ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
es una constante precalculada incorporada para Math.log(10)
, por lo que esta función es esencialmente idéntica a:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Simplemente puede dividir el logaritmo de su valor y el logaritmo de la base deseada, también puede anular el Math.log
método para aceptar un argumento base opcional:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
la respuesta aquí causaría un problema de precisión obvio y no es confiable en algunos casos de 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));
}
Entonces puedes hacer
Math.log10(your_number);
NOTA: Inicialmente pensé Math.prototype.log10 = ...
hacer esto, pero el usuario CMS señaló que Math no funciona de esta manera, así que edité la .prototype
parte.
.prototype
parte;)
FF 25+ admite un Math.log10
método. Puede usar polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN enumera los navegadores compatibles .
Navegadores de escritorio
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Navegadores móviles
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 respuesta principal está bien para una base arbitraria, pero la pregunta está relacionada con la base de registro 10, y Math.log10(x)
ha sido estándar en todos los navegadores desde 2015. *
* Excepto IE, si eso es importante para ti por alguna razón.
Si tiene un número x, entonces use Math.log(x)
sería esencialmente lnx.
Para convertirlo a una base que no sea e, puede usar la siguiente función:
function(x){ return Math.log(x)/Math.log(10); }
Para uso base 10 Math.log10()
.
Ver documentos en: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10