Como posso especificar a base para Math.log () em JavaScript?

Eu preciso de uma function de log para JavaScript, mas ela precisa ser a base 10. Não consigo ver nenhuma listview para isso, então estou assumindo que não é possível. Há algum feiticeiro de matemática que saiba uma solução para isso?

Logaritmo para base 10


Como o Math.log(x) em JavaScript retorna o logaritmo natural de x (o mesmo que ln (x) ), para a base 10 você pode dividir por Math.log(10) (o mesmo que ln (10) ):

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

Math.LN10 é uma constante pré-computada Math.log(10) para Math.log(10) , portanto, esta function é essencialmente idêntica a:

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

Fácil, basta alterar a base dividindo pelo log (10). Existe até uma constante para ajudá-lo

 Math.log(num) / Math.LN10; 

que é o mesmo que:

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

Você pode simplesmente dividir o logaritmo do seu valor, e o logaritmo da base desejada, você também pode sobrescrever o método Math.log para aceitar um 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); 

a resposta aqui causaria problemas óbvios de precisão e não é confiável em alguns 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.log10 = function(n) { return (Math.log(n)) / (Math.log(10)); } 

Então você pode fazer

 Math.log10(your_number); 

NOTA: Inicialmente eu pensei em fazer Math.prototype.log10 = ... para fazer isso, mas o usuário CMS apontou que Math não funciona dessa maneira, então eu editei a parte .prototype .

 Math.logBase = function(n, base) { return Math.log(n) / Math.log(base); }; 

FF 25+ suporta um método Math.log10 . Você pode usar o polyfill:

 if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; }; 

O MDN lista os navegadores suportados .

Navegadores de desktop

 Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1 

Navegadores móveis

 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 

Se você tiver um número x, o uso de Math.log(x) seria essencialmente lnx.

Para convertê-lo em uma base diferente de e, você pode usar a seguinte function:

 function(x){ return Math.log(x)/Math.log(10); }