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

Why does my function start returning nan?

本文关键字:返回 nan 开始 函数 我的 为什么      更新时间:2023-10-16

程序应该运行函数直到满足条件(answer <0.01),然后报告该条件所需的服务器数量(c)。我的程序从来没有到达那个点,因为它在程序中途开始返回nan。有人能告诉我我做错了什么吗?

#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;
}

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

如果您忘记在else后面的缩进代码周围使用大括号,则不初始化result,它仍将包含一个看似随机的值。

这些随机值当然包括NaN

从你的缩进来看,我想你的意思是:

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条件周围添加了{}

  1. 在else

    后面加上大括号

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

  2. if(p == 0) result = 1赋值answer = 1,然后返回结果,在本例中未初始化,当p = 0时将为您提供NaN值。尽管在当前情况下p永远不会为零,因为传递给product的参数c的范围在1到220之间。

  3. 删除全局变量answer的声明。