Я хотел знать, какая худшая временная сложность функции pow(), построенной на С++?
Временная сложность функции С++ math library 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/...