Potrzebuję log
funkcji dla JavaScript, ale musi to być baza 10. Nie widzę w tym żadnej listy, więc zakładam, że to niemożliwe. Czy są jacyś czarodzieje matematyki, którzy znają rozwiązanie tego problemu?
Potrzebuję log
funkcji dla JavaScript, ale musi to być baza 10. Nie widzę w tym żadnej listy, więc zakładam, że to niemożliwe. Czy są jacyś czarodzieje matematyki, którzy znają rozwiązanie tego problemu?
Odpowiedzi:
Formuła / tożsamość „Zmiana podstawy”
Wartość liczbową logarytmu do podstawy 10 można obliczyć z następującą tożsamością.
Ponieważ Math.log(x)
w JavaScript zwraca logarytm naturalny x
(taki sam jak ln (x) ), dla podstawy 10 możesz podzielić przez Math.log(10)
(taki sam jak ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
jest wbudowaną wstępnie obliczoną stałą dla Math.log(10)
, więc ta funkcja jest zasadniczo identyczna z:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Możesz po prostu podzielić logarytm wartości i logarytm pożądanej podstawy, możesz też przesłonić Math.log
metodę, aby zaakceptować opcjonalny argument bazowy:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
odpowiedź tutaj spowodowałaby oczywisty problem z precyzją i nie jest wiarygodna w niektórych przypadkach użycia
> 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));
}
To możesz zrobić
Math.log10(your_number);
UWAGA: Początkowo myślałem, aby to Math.prototype.log10 = ...
zrobić, ale użytkownik CMS zwrócił uwagę, że matematyka nie działa w ten sposób, więc zredagowałem tę .prototype
część.
.prototype
część;)
FF 25+ obsługuje Math.log10
metodę. Możesz użyć polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN wyświetla listę obsługiwanych przeglądarek .
Przeglądarki stacjonarne
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Przeglądarki mobilne
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)
! 😁
Najlepsza odpowiedź jest odpowiednia dla dowolnej bazy danych, ale pytanie dotyczy bazy danych dziennika 10 i Math.log10(x)
jest standardem we wszystkich przeglądarkach od 2015 roku. *
* Z wyjątkiem IE, jeśli z jakiegoś powodu jest to dla Ciebie ważne.
Jeśli masz liczbę x, użyj Math.log(x)
będzie w zasadzie lnx.
Aby przekonwertować go na bazę inną niż e, możesz użyć następującej funkcji:
function(x){ return Math.log(x)/Math.log(10); }
Do użytku z bazą 10 Math.log10()
.
Zobacz dokumenty na: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10