Как я могу указать базу для Math.log() в JavaScript?

Мне нужна функция log для JavaScript, но она должна быть базовой 10. Я не вижу никаких данных для этого, поэтому я предполагаю, что это невозможно. Есть ли там математические волшебники, которые знают решение для этого?

Ответ 1

"Смена базы" Формула/Идентичность

Числовое значение для логарифма по основанию 10 может быть вычислено со следующим тождеством.

Logarithm for base 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.LN10 константой для Math.log(10), поэтому эта функция по существу идентична:

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

Ответ 2

Легко, просто измените базу, разделив ее на журнал (10). Существует даже постоянный, чтобы помочь вам

Math.log(num) / Math.LN10;

что совпадает с:

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

Ответ 3

Вы можете просто делить логарифм вашего значения и логарифм нужной базы, также вы можете переопределить метод Math.log, чтобы принять необязательный базовый аргумент:

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

Math.log(5, 10);

Ответ 4

ответ здесь может вызвать очевидную проблему точности и не является надежным в некоторых случаях использования

> 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

Ответ 5

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

Затем вы можете сделать

Math.log10(your_number);

ПРИМЕЧАНИЕ. Первоначально я думал сделать Math.prototype.log10 = ..., чтобы сделать это, но пользователь CMS указал, что Math не работайте таким образом, поэтому я отредактировал часть .prototype.

Ответ 6

const logBase = (n, base) => Math.log(n) / Math.log(base);

Ответ 7

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

Ответ 8

Если у вас есть число x, то использование Math.log(x) будет по существу равно lnx.

Чтобы преобразовать его в базу, отличную от e, вы можете использовать следующую функцию:

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

Ответ 9

Math.log10(x) ! 😁

Верхний ответ подходит для произвольной базы, но вопрос касается базы 10 журналов, а Math.log10(x) является стандартным для всех браузеров с 2015 года. *

* За исключением IE, если это важно для вас по какой-то причине.