2011-05-25 66 views
4
#include <iostream> 

double power (double z, int n) 
{ 
    double result(0.0); 
    for (int i = 1; i <= n; i++) 
     result *= z; 
    return result; 
} 

int main() 
{ 
    int index(3); 
    double x(5.0), double y(0.0); 
    y = power (x, index); 
    std::cout << y << std::endl; 
    return 0; 
} 

你好,请问这段代码中的错误在哪里?计算5的3次幂,但返回0.为什么?

谢谢!

+0

为什么不在C标准库中使用'std :: pow'函数? – 2011-05-25 08:01:47

+1

对不起,我是C++初学者,我想学习如何创建函数。 – John 2011-05-25 08:03:35

+0

这种指数算法找到力量是最好的,你可以发现/发现?有非常明显的线性算法。 – 2011-05-25 08:06:48

回答

12

因为result初始化为0。正如我们所知,0 * anything == 0。你需要从1开始。

[未来,请学习如何调试!如果您已经在调试器中加入了代码,或者在您的函数中添加了一些printf语句,那么您很容易就发现了这一点。]

+1

用于调试建议。 – Nawaz 2011-05-25 08:23:24

1

错误是double result(0.0);。 0乘以任何事情都是0

必须double result(1.0);

+0

其实零乘以NaN不为零:-) – paxdiablo 2011-05-25 08:24:54

+2

@paxdiablo:我的陈述是数学的。数学中没有NaN这样的东西。 :)好吧,让我们停止洪水。 – 2011-05-25 08:28:57

0

你的结果应该被初始化为1.0不是0.0。

1

在您的电源功能中,您的result初始化为0.0,那么当您乘以z n次时,您只需乘以0乘以z。

您应该更改double result(1.0);