我想知道用c ++构建的pow()函数的最坏情况时间复杂度是什么?
答案 0 :(得分:11)
这取决于底层架构。在最常见的桌面架构x86上,这是一个恒定时间操作。
有关如何在x86上实施该问题的详细信息,请参阅此问题:How to: pow(real, real) in x86
答案 1 :(得分:2)
以下是one implementation,请看一下。可以肯定的是,这是一个相当复杂的代码,有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'
算术,|y'|<=0.5
。返回
x**y = 2**n*exp(y'*log2)
答案 2 :(得分:1)
你没有提到你所使用的系统/架构,所以我们只能猜测。
但是,如果您没有寻找具体信息,只想浏览免费实施的代码 请参阅 http://www.netlib.org/fdlibm/,特别是{{3 }}
有关更多背景信息,请参阅此问题的答案:http://www.netlib.org/fdlibm/w_pow.c