Временная сложность функции С++ math library pow()?
Я хотел знать, какая худшая временная сложность функции pow(), построенной на С++?
Ответы
Ответ 1
Это зависит от базовой архитектуры. В самой общей архитектуре настольных компьютеров x86 это постоянная операция времени.
См. этот вопрос для получения более подробной информации о том, как он может быть реализован на x86: Как: pow (real, real) в x86
Ответ 2
Вот одна реализация, посмотрите. Разумеется, это довольно сложная часть кода, в которой есть 19 специальных случаев. Сложность времени не зависит от значений, переданных в.
Ниже приведено краткое описание метода, используемого для вычисления pow(x,y)
:
Method: Let `x = 2 * (1+f)`
-
Вычислить и вернуть log2(x)
в две части: log2(x) = w1 + w2
где w1
имеет 53-24 = 29
битные конечные нули.
-
Выполните y*log2(x) = n+y'
путем моделирования точности muti арифметика, где |y'|<=0.5
.
-
Возврат x**y = 2**n*exp(y'*log2)
Ответ 3
Вы не упоминаете, какую систему/архитектуру вы используете, поэтому мы оставляем догадки.
Однако , если вы не ищете специфику и просто хотите просмотреть код свободно доступной реализации См. http://www.netlib.org/fdlibm/, в частности http://www.netlib.org/fdlibm/w_pow.c
Подробнее см. в этом вопросе: fooobar.com/info/8521/...