该程序应运行该函数,直到满足条件(回答<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;
}
答案 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)
在其他
之后的两个语句周围添加大括号 else
{
temp=200*product(p-1);
result=temp/(temp+p);
}
if(p == 0)
result = 1
分配answer = 1然后返回结果,在这种情况下未初始化将在p = 0时给出NaN值。虽然p在当前情况下永远不会为零,因为参数c
传递给product
范围在1到220之间。
删除全局变量answer
的声明。最有可能的是,你不需要它。