Функции логарифма математического модуля Python

Possible Duplicate:
Inaccurate Logarithm in Python

Почему результаты math.log10 (x) и math.log (x, 10) отличаются?

In [1]: from math import *

In [2]: log10(1000)
Out[2]: 3.0

In [3]: log(1000,10)
Out[3]: 2.9999999999999996
3
nl ja de
Похоже, что log (1000,10) интерпретируется как log (1000)/log (10), что имеет смысл. Тогда дело сводится к различию между прямой функцией log10 и ошибкой с плавающей запятой из двух журналов и делением их. Неудивительно, что первое является более точным.
добавлено автор Justin Peel, источник
Некоторая проблема точности с плавающей запятой
добавлено автор keyser, источник
добавлено автор user180100, источник

3 ответы

math.log10 and math.log(x, 10) are using different algorithm, and the former is usually more accurate. Actually, it's a known issue(Issue6765): math.log, log10 inconsistency.

Можно подумать таким образом: log10 (x) имеет фиксированную базу, поэтому его можно вычислить непосредственно по формуле математической аппроксимации (например, серии Тейлора), а log (x, 10) получается из более общей формулы с двумя переменными, которые могут быть косвенно вычислены с помощью log (x)/log (10) (по крайней мере точность log (10) будет влиять на точность частного). Поэтому естественно, что прежний способ является более быстрым и точным, и это разумно, учитывая, что он использует известную логарифмическую базу (т. Е. 10).

3
добавлено

It's a known bug : http://bugs.python.org/issue3724

Кажется, logX (y) всегда точнее, чем эквивалентный log (Y, X).

3
добавлено

Как указывали другие, log (1000, 10) вычисляется внутренне как log (1000)/log (10) . Это можно проверить эмпирически:

In [3]: math.log(1000, 10) == math.log(1000)/math.log(10)
Out[3]: True

In [4]: math.log10(1000) == math.log(1000)/math.log(10)
Out[4]: False

Результаты ни log (1000) , ни log (10) не могут быть представлены как float , поэтому окончательный результат также неточный.

2
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Infernal Math
Infernal Math
389 участник(ов)

http://www.zepta.ru/index.php?title=Заглавная_страница Приглашение в чат: https://t.me/matheden

comput.math
comput.math
289 участник(ов)

Прикладная математика и численные методы. Без оффтопа, рекламы, флуда. Вышмат: @higher_math Физика: @physpub Новичкам: @starter_math @JuliaLanguage @rlang_ru Книги брать здесь: libgen.io И по хештегу #book

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community

higher.math
higher.math
234 участник(ов)

Higher mathematics / высшая математика Подборка книжек: https://ru.stackoverflow.com/a/683632/1084 Вычмат: @comput_math Физика: @physpub LaTeX: @pro_latex

Starter Math
Starter Math
79 участник(ов)

Для тех, кто боится спросить в @higher_math Вычмат: @comput_math Физика: @physpub