为什么我的函数开始返回nan
Why does my function start returning nan?
程序应该运行函数直到满足条件(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
条件周围添加了{
和}
。
-
在else
后面加上大括号else { temp=200*product(p-1); result=temp/(temp+p); }
-
if(p == 0) result = 1
赋值answer = 1,然后返回结果,在本例中未初始化,当p = 0时将为您提供NaN值。尽管在当前情况下p永远不会为零,因为传递给product
的参数c
的范围在1到220之间。 -
删除全局变量
answer
的声明。
相关文章:
- 为什么这段代码返回 -nan(ind)?C++
- 为什么 std::isnan() 对于具有 NAN 值的双变量返回 false
- 有意返回 NaN
- 牛顿方法返回 NaN
- Double Exp(double)出乎意料地返回NAN(无浮子溢出)
- NAN通过指针访问时是否返回false
- AVX内在_mm256_cmp_ps是否应在为true时返回NaN
- OpenCV 3.1 ANN 预测返回 nan
- nan在C++中是什么意思?为什么pow(-4,-2.1)返回-nan
- 当 M 很大时返回 nan(ind)
- 特征库的矩阵逆函数返回NaN
- c++中返回NaN的函数
- 函数一直返回NaN
- 神经网络在OpenCV 3.0中只返回nan
- 为什么我的函数开始返回nan
- 返回NaN或抛出异常
- NaN或false作为双精度返回值
- 如果任一参数为 NaN,什么会导致 C/C++ <、<= 和 == 运算符返回 true?
- FFTW3 DFT 2D总是返回NaN
- 正态估计返回NAN的曲率场