Мне нужна log
функция для JavaScript, но она должна быть базовой 10. Я не вижу никаких списков для этого, поэтому я предполагаю, что это невозможно. Есть ли там математические волшебники, которые знают решение для этого?
Мне нужна log
функция для JavaScript, но она должна быть базовой 10. Я не вижу никаких списков для этого, поэтому я предполагаю, что это невозможно. Есть ли там математические волшебники, которые знают решение для этого?
Ответы:
"Смена базы" Формула / Идентичность
Числовое значение для логарифма по основанию 10 может быть вычислено со следующим тождеством.
Поскольку Math.log(x)
в JavaScript возвращается натуральный логарифм x
(такой же, как ln (x) ), для базы 10 вы можете разделить на Math.log(10)
(так же, как ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
является встроенной предварительно вычисленной константой для Math.log(10)
, так что эта функция по существу идентична:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Вы можете просто разделить логарифм вашего значения и логарифм желаемой базы, также вы можете переопределить Math.log
метод, чтобы принять необязательный базовый аргумент:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
ответ здесь вызовет очевидную проблему точности и не является надежным в некоторых случаях использования
> 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));
}
Тогда вы можете сделать
Math.log10(your_number);
ПРИМЕЧАНИЕ. Сначала я думал сделать Math.prototype.log10 = ...
это, но пользователь CMS указал, что Math не работает таким образом, поэтому я отредактировал эту .prototype
часть.
.prototype
часть;)
FF 25+ поддерживает Math.log10
метод. Вы можете использовать polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN перечисляет поддерживаемые браузеры .
Настольные браузеры
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Мобильные браузеры
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)
! 😁
Верхний ответ подходит для произвольной базы, но вопрос касается базы 10 журналов и Math.log10(x)
является стандартным для всех браузеров с 2015 года. *
* За исключением IE, если это важно для вас по какой-то причине.
Если у вас есть номер х, то используйте Math.log(x)
существу будет lnx.
Чтобы преобразовать его в базу, отличную от e, вы можете использовать следующую функцию:
function(x){ return Math.log(x)/Math.log(10); }
Для базы 10 использовать Math.log10()
.
См. Документы по адресу: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10.