2011-05-25 68 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);