求幂算法如何工作?

时间:2014-08-05 18:13:15

标签: c algorithm function math exponentiation

大多数现代语言中的指数很容易..我用我选择的语言中的常用运算符或任何补偿它以获得所需功能的函数。
我想知道,这究竟是如何运作的?

C中的以下算法通常用于演示此效果。

double exp(val, pow) {
    for(int i = 0; i < pow; ++i)
        val *= val;
    return val;
} // exp(2, 3) -> 8

然而,这里有一个严重的错误..如果 pow 是2.6怎么办?那也会返回8 ..这只是因为循环条件只比较了两个数字。
但是,当我做这样的事情时,它运作良好..

#include <math.h>
int main() {
    printf("The result of 2 to the power of 2.6 is %.2f", pow(2, 2.6));
}

如何实现后一种行为?

编辑:

根据答案,似乎泰勒扩展算法是取幂的关键,那么......乘法呢?如何实现十进制乘法?

2 个答案:

答案 0 :(得分:8)

指数通常被实现为(许多特殊情况加上)减少到exp。如果您有exp函数及其反ln方便,则可以将x ^ y计算为

exp(y*ln(x))

但您可能想知道exp是如何实施的。对于小参数,系列扩展效果很好:

  

exp(x)= 1 + x + x ^ 2/2 + x ^ 3/6 + x ^ 4/24 + ...

编辑:这是其他答案中提到的泰勒扩张。

对于较大的值,可以使用参数减少技术来计算值。

答案 1 :(得分:1)

没有一种方法可以准确地解决这个问题,但可以使用here看到的系列进行近似。