Como posso especificar a base para Matemática.registo () em JavaScript?

Preciso de uma função log para JavaScript, mas tem de ser a base 10. Não vejo nenhuma lista para isto, por isso, presumo que não seja possível. Há algum mago da matemática que saiba uma solução para isto?

Author: nyuszika7h, 2010-06-11

8 answers

"alteração da Fórmula / identidade de Base

O valor numérico do logaritmo para a base 10 pode ser calculado com a seguinte identidade.

Logarithm for base 10


Uma vez que Math.log(x) no JavaScript devolve o logaritmo natural de x (igual a ln (x) ), para a base 10 poderá dividir por Math.log(10) (igual a ln(10)):

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

Math.LN10 é uma constante pré-complicada incorporada para Math.log(10), por isso esta função é essencialmente idêntico a:

function log10(val) {
  return Math.log(val) / Math.log(10);
}
 297
Author: Peter, 2018-09-29 12:25:41

Fácil, basta mudar a base dividindo pelo log(10). Há até uma constante para te ajudar.

Math.log(num) / Math.LN10;

Que é o mesmo que:

Math.log(num) / Math.log(10);
 60
Author: bramp, 2010-06-10 23:35:47

Você pode simplesmente dividir o logaritmo do seu valor, e o logaritmo da base desejada, também você pode sobrepor o método Math.log para aceitar um argumento de base opcional:

Math.log = (function() {
  var log = Math.log;
  return function(n, base) {
    return log(n)/(base ? log(base) : 1);
  };
})();

Math.log(5, 10);
 45
Author: CMS, 2010-06-10 23:38:45

A resposta aqui causaria um problema óbvio 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
 14
Author: Royce Chao, 2013-06-01 03:42:06
Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

Depois podes fazer

Math.log10(your_number);

Nota: inicialmente pensei em fazer Math.prototype.log10 = ... para fazer isto, mas o utilizador CMS apontou que a matemática não funciona assim, por isso editei a parte .prototype.

 11
Author: artlung, 2017-05-23 12:26:31
Math.logBase = function(n, base) {
    return Math.log(n) / Math.log(base);
};
 8
Author: Yukulélé, 2014-01-23 10:44:03

FF 25 + suporta um Math.log10 método. Pode utilizar polifill:

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

O MDN lista os navegadores suportados .

Navegadores De Secretária

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
 8
Author: Ivan Black, 2015-08-28 06:21:39

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

Para convertê-lo para uma base diferente da e, pode usar a seguinte função:

function(x){ return Math.log(x)/Math.log(10); }
 0
Author: Kartik Singh, 2016-06-24 04:41:25