【发布时间】:2018-09-29 10:40:48
【问题描述】:
我写了一个函数来计算 O(logb) 中的 pow(a,b)。
double pow(double a, int b){
double res=1;
while(b>0){
if (b%2==1){
res=res*a;
}
b=b>>1;
a=a*a;
}
return res;
}
我偶然发现了一个问题,是否可以在O(1) 时间编写函数 pow(double a, double b)。然而我还没有找到答案。
【问题讨论】:
-
如果可能的话,您不认为标准实现会使用这种方法吗?
-
假设 IEEE754,我们有 64 位的双精度,即。 e. 2^64 个值,两个参数,2^65 种组合。由于我们有一组有限的输入,我们总是是 O(1)...
-
要说明计算复杂性的意义,您需要定义您计算的基本操作是什么,以及根据什么变量。
-
正如 Aconcagua 所指出的,您有一组有限的输入。所以你可以使用一个(相当大的!)查找表。
-
您必须在
double b和int b之间进行选择;这些是不同的问题。