log10 - logaritmo javascript
¿Cómo puedo especificar la base para Math.log() en JavaScript? (8)
Necesito una función de log
para JavaScript, pero debe ser la base 10. No puedo ver ninguna lista para esto, así que estoy asumiendo que no es posible. ¿Hay magos matemáticos que conocen una solución para esto?
Fácil, simplemente cambie la base dividiendo por el registro (10). Incluso hay una constante para ayudarte
Math.log(num) / Math.LN10;
que es lo mismo que:
Math.log(num) / Math.log(10);
FF 25+ es compatible con un método Math.log10
. 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
Si tiene un número x, entonces el uso de 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); }
Simplemente puede dividir el logaritmo de su valor y el logaritmo de la base deseada, también puede anular el método Math.log
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 problemas obvios de precisión 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
Como Math.log(x)
en JavaScript devuelve el logaritmo natural de x
(igual que ln (x) ), para la base 10 puede dividir por Math.log(10)
(igual que ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
es una constante Math.log(10)
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);
}
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
Entonces puedes hacer
Math.log10(your_number);
NOTA: Inicialmente pensé en hacer Math.prototype.log10 = ...
para hacer esto, pero el usuario señaló que Math no funciona de esta manera, así que .prototype
parte .prototype
.
Math.logBase = function(n, base) {
return Math.log(n) / Math.log(base);
};