为什么我的函数开始返回nan?

时间:2013-04-07 15:48:21

标签: c++

该程序应运行该函数,直到满足条件(回答<0.01),然后报告该条件所需的服务器数量(c)。我的程序永远不会达到这一点,因为它开始在程序中途返回nans。有人可以告诉我我做错了吗?

#include <iostream>
#include <cmath>
#include <math.h>


using namespace std;

float product (float p);
float answer;


int main()
{
    cout << "Searching for minimum number of servers..." << endl;

    float c;
    float answer;

    do
    {for (c=1; c<220; c++)
      {
        answer = product(c);
        cout << "when c is " << c << " answer is " << answer << endl;
      }
    }while (answer >= 0.01);

    cout << "when c is " << c << " answer is " << product(c) << endl;
    cout << "Minimum number of servers required is " << c << endl;

    return 0;
}

float product (float p)
{
    float temp;
    float result;
    if (p==0)
        answer = 1;
    else
        temp=200*product(p-1);
        result=temp/(temp+p);
    return result;
}

3 个答案:

答案 0 :(得分:1)

product函数中,如果temp等于p,则不会设置0。这导致temp未初始化,并且在您稍后计算result时包含看似随机的值。

如果您在else之后忘记了缩进代码周围的大括号,则会将result保留为未初始化状态,但仍会包含看似随机的值。

这些随机值当然包括NaN

答案 1 :(得分:0)

从你的缩进,我希望你写这个:

float product (float p)
{
    float temp;
    float result;
    if (p==0)
        answer = 1;
    else
    {
        temp=200*product(p-1);
        result=temp/(temp+p);
    }
    return result;
}

请注意,我在{条件周围添加了}else

答案 2 :(得分:0)

  1. 在其他

    之后的两个语句周围添加大括号

    else { temp=200*product(p-1); result=temp/(temp+p); }

  2. if(p == 0) result = 1 分配answer = 1然后返回结果,在这种情况下未初始化将在p = 0时给出NaN值。虽然p在当前情况下永远不会为零,因为参数c传递给product范围在1到220之间。

  3. 删除全局变量answer的声明。最有可能的是,你不需要它。