Как вы можете выполнять различные базовые логарифмические функции в Javascript?

Эта проблема задается, имея в виду сервер node.js, но я сформулировал вопрос как «javascript», потому что я, вероятно, буду использовать ту же логику и для клиентского скрипта.

Вот проблема: для заданного набора значений x y необходимо масштабировать логарифмическим способом. Объект Math выполняет естественный логарифм [ln(x)], но не предоставляет интерфейс для указания основания логарифма.

Для конкретного примера мне нужно найти следующее:

log[512](2)

Что должно вернуть .1111 ~

Однако я не вижу интерфейса, который позволяет мне это сделать, и, похоже, я не могу найти библиотеку, которая предоставляет возможность для базы журнала. Конечно, это обычная проблема, и у нее есть решение, но мой поиск нашел решения только для разных / не связанных проблем. Идеи?


person Aejay    schedule 13.12.2011    source источник
comment
Возможный дубликат: Как можно указать базу math.log () в javascript?   -  person hippietrail    schedule 28.10.2012


Ответы (2)


Вы можете использовать формулу изменения базы логарифма:

log[a](n) = log[b](n) / log[b](a)

Итак, чтобы получить log (2) base 512, используйте:

function log(b, n) {
    return Math.log(n) / Math.log(b);
}

alert(log(2, 512));

Обратите внимание, что Math.log выше использует естественную логарифмическую основу; т.е. математически это будет записано как ln.

person Platinum Azure    schedule 13.12.2011
comment
функция javascript будет выглядеть как function log(base, number) { return Math.ln(number) / Math.ln(base); } - person Dan D.; 13.12.2011
comment
Итак, это оказался математический вопрос. Господи, прошло много лет с тех пор, как мне приходилось решать задачи логарифмирования. Благодарю за быстрое исправление. - person Aejay; 13.12.2011
comment
Совершенно верно, я забыл, что это был вопрос JS, а не просто математический. Спасибо! - person Platinum Azure; 13.12.2011
comment
На самом деле, я только что попробовал, и это действительно должно быть log, а не ln. Я чувствую себя ужасно из-за того, что оставил это на год. - person Platinum Azure; 27.12.2012
comment
Прошел уже год? Ух ты. Похоже, я спросил об этом месяц назад. Кстати, странно, как log относится к ln в программировании; Я уверен, что это заставило многих программистов разочароваться в отладке. Тот факт, что вам придется изо всех сил стараться найти или воссоздать журнал [10], может раздражать. - person Aejay; 28.12.2012

Я нашел этот ответ в качестве первого результата сегодня в Google, и если кто-то еще его найдет, есть небольшая ошибка. Правильная версия выглядит следующим образом:

function log(b, n) {  
    return Math.log(n) / Math.log(b);  
}
person mmateoo    schedule 10.12.2012
comment
Что ж, теперь это исправлено ... :-) - person Platinum Azure; 24.06.2015