log2 в математическом модуле Python - PullRequest
41 голосов
/ 08 июня 2010

почему его не существует?

import math
[x for x in dir(math) if 'log' in x]
>>> ['log', 'log10', 'log1p']

Я знаю, что могу сделать log (x, 2), но log2 действительно распространен, поэтому я немного сбит с толку.

О, похоже, это определено только в C99, а не в C90, наверное, это отвечает на мой вопрос.Все еще кажется глупым.

Ответы [ 2 ]

49 голосов
/ 08 июня 2010

Я думаю, что вы ответили на свой вопрос. :-) Там нет log2(x), потому что вы можете сделать log(x, 2). Как говорит Дзен Питона ( PEP 20 ): «Должен быть один - и предпочтительно только один - очевидный способ сделать это».

Тем не менее, log2 был рассмотрен в Issue3366 (прокрутите вниз до последних 3 сообщений), который добавил несколько других математических функций C99 в модуль math для Python 2.7 и 3.2.

Редактировать : log2 был пересмотрен в Issue11888 и добавлен в Python 3.3.

6 голосов
/ 12 марта 2014

Я не уверен, что есть то, что вы хотите, но:

- С математической точки зрения вы можете сделать, например, math.log (x) /math.log (2).

- Если вход X имеет целочисленный тип и вы ожидаете получения округленного целочисленного результата - вы можете сделать это довольно быстро с помощью смещения вправо. Это работает с командой SHR и без рядов Тейлора + локальной интерполяции, которая скрывается за вызовами libc log ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...