C ++中的计算问题

时间:2013-10-28 06:43:51

标签: c++ function algebra

所以在这个程序中,我试图打印出用户输入的一组数字的标准偏差。计算标准偏差的公式是正确的(或者是正确的)所以这不是问题,但是当我运行程序时一切顺利,直到控制台打印出结果。它打印出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;
}

4 个答案:

答案 0 :(得分:1)

NaN代表“不是数字”。

答案 1 :(得分:1)

NaN例如可以成为结果:

- Dividing by zero
- Taking the square root of a negative number 

在你的功能中,这两种情况都可能发生。除以零,例如当counter是&lt; = 1时;并且x1x2未初始化(+=将右侧的值添加到当前值 - 这是从未设置的,因此是随机乱码),这很容易导致你的功能试图取一些值的平方根&lt; 0

答案 2 :(得分:1)

此表达式

counter * x1 - pow(x2,2)

很容易产生负数。然后你继续采用它的平方根。这将导致nan

接下来,这个

counter * (counter - 1)
0counter时,

产生1。除以零得到nan

答案 3 :(得分:0)

你的公式错了。您要么除以零,要么取负数的平方根。

检查你的配方!

其他信息:

NaN是“不是数字”。它是一个IEEE浮点值,表示无效结果,如log(-1)或sqrt(-4)。

此外,要知道正无穷大和负无穷大也是浮点值。