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?
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.
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);
}
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);
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);
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
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
.
Math.logBase = function(n, base) {
return Math.log(n) / Math.log(base);
};
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
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); }