C ++函数返回'inf'而不是double

时间:2015-09-15 13:30:58

标签: c++ floating-point double

我有以下简单的代码来计算n次谐波数。无论我尝试什么,我都会在输出中保持“inf”值。即使我的所有变量都是双倍的,这怎么可能呢?

#include <cstdlib>
#include <iostream>
using namespace std;

double harmonic(double n){
    double h = 0.0;
    while(n >= 0){
        h = h + (1.0/n);
        n = n-1.0;

    }
    return(h);
}
int main(int argc, char** argv) {
    double n;
    cout << "enter an integer: ";
    cin >> n;
    cout << "The " << n << "th harmonic number is: ";
    cout << harmonic(n) << endl;

    return 0;
}

2 个答案:

答案 0 :(得分:3)

想一想:

while(n >= 0){
    h = h + (1.0/n);
    n = n-1.0;

}

说我通过了n = 0.0。循环将执行,但是n = 0因此你正在执行除零。

答案 1 :(得分:1)

inf是一个特殊的浮点值,例如,从零除以产生。后者确实发生在你的程序中:当n达到零时,你的循环仍然继续,你试图将1.0除以零。

将您的循环更改为while (n>0)