Алгоритм логарифмирования

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

Как быстро найти двоичный логарифм? (O (1) в лучшем случае) мог бы ответить на мой вопрос, но я его не понимаю. Можно это прояснить?


person Justin    schedule 12.12.2012    source источник
comment
Уловки, упомянутые в этом вопросе, используют способ хранения чисел в памяти. Вам лучше полагаться на методы Math (или BigInteger / BigDecimal), если вы не полностью понимаете эти уловки. В любом случае, они пользуются преимуществом того факта, что числа внутренне представлены очень близко к их представлению в базе 2. В Java у вас нет объединений, вместо этого вы получаете необработанные биты двойника через Double.doubleToRawLongBits.   -  person ignis    schedule 12.12.2012
comment
BigInteger и BigDecimal не содержат методов журнала.   -  person Justin    schedule 12.12.2012
comment
точно. для целых чисел использовать очевидный сдвиг бит в счетном цикле.   -  person    schedule 12.12.2012


Ответы (1)


Используйте это удостоверение:

log b (n) = log e (n) / log e (b)

Где log может быть логарифмической функцией с любым основанием, n - это число, а b - это основание. Например, в Java это найдет логарифм по основанию 2 256:

Math.log(256) / Math.log(2)
=> 8.0

Math.log() использует базу e , Кстати. Также есть Math.log10() , который использует базу 10.

person Óscar López    schedule 12.12.2012
comment
Я знаю эту личность. Я хочу вычислить логарифм с большей точностью, чем может дать двойное значение. - person Justin; 12.12.2012
comment
@ user1896169 в этом случае переключитесь на BigDecimal и используйте этот рецепт для вычисления логарифма. - person Óscar López; 12.12.2012
comment
База по умолчанию Math.log () - e - person someone; 12.12.2012
comment
@ Óscar López, я пробовал это, мой компилятор (Eclipse) не знает, что такое intRoot, и я не знаю, что означает intRoot - person Justin; 12.12.2012
comment
@ user1896169 быстрый поиск в Google дал эту ссылку с полной реализацией функций - person Óscar López; 12.12.2012