所以在这个程序中,我试图打印出用户输入的一组数字的标准偏差。计算标准偏差的公式是正确的(或者是正确的)所以这不是问题,但是当我运行程序时一切顺利,直到控制台打印出结果。它打印出totalStandardDeviation = nan
究竟是什么意思?是和nil一样?它是否以某种方式失去了价值并且无法找到它?感谢您提供的任何帮助。
#include <iostream>
#include <cmath>
using namespace std;
double returnStandardDeviation(double x, int counter);
double total;
int userInput = 1;
int counter = 0;
double x;
double x1;
double x2;
double standardDeviation;
double totalStandardDeviation;
int main(int argc, const char * argv[])
{
cout << "Please enter a list of numbers. When done enter the number 0 \n";
cin >> userInput;
while (userInput != 0) // As long as the user does not enter 0, program accepts more data
{
counter++;
x = userInput;
returnStandardDeviation( x, counter); // send perameters to function
cout << "Please enter next number \n";
cin >> userInput;
}
cout << "The standard deviation of your "
<< counter
<< " numbers is : "
<< returnStandardDeviation(x, counter);
return 0;
}
double returnStandardDeviation(double x, int counter)
{
x1 += pow(x,2);
x2 += x;
totalStandardDeviation = 0;
totalStandardDeviation += (sqrt(counter * x1 - pow(x2,2))) / (counter * (counter - 1));
return totalStandardDeviation;
}
答案 0 :(得分:1)
NaN代表“不是数字”。
答案 1 :(得分:1)
NaN例如可以成为结果:
- Dividing by zero
- Taking the square root of a negative number
在你的功能中,这两种情况都可能发生。除以零,例如当counter
是&lt; = 1时;并且x1
和x2
未初始化(+=
将右侧的值添加到当前值 - 这是从未设置的,因此是随机乱码),这很容易导致你的功能试图取一些值的平方根&lt; 0
答案 2 :(得分:1)
此表达式
counter * x1 - pow(x2,2)
很容易产生负数。然后你继续采用它的平方根。这将导致nan
。
接下来,这个
counter * (counter - 1)
当0
为counter
时,产生1
。除以零得到nan
。
答案 3 :(得分:0)
你的公式错了。您要么除以零,要么取负数的平方根。
检查你的配方!
其他信息:
NaN是“不是数字”。它是一个IEEE浮点值,表示无效结果,如log(-1)或sqrt(-4)。
此外,要知道正无穷大和负无穷大也是浮点值。