0

したがって、このプログラムでは、ユーザーが入力した一連の数値の標準偏差を出力しようとしています。標準偏差を計算する式は正しい (または必要なだけ正しい) ため、問題はありませんが、プログラムを実行すると、コンソールに結果が出力されるまですべてがうまくいきます。totalStandardDeviation = nan を出力します

とはどういう意味ですか? 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

4 に答える 4

1

この表現

counter * x1 - pow(x2,2)

非常に簡単に負の数が得られます。次に、その平方根を取ります。これにより、nan.

次は、これ

counter * (counter - 1)

お譲りの0場合counterはお譲り致し1ます。ゼロで割ると が得られますnan

于 2013-10-28T06:53:27.997 に答える
1

NaNは「非数」の略です。

于 2013-10-28T06:46:36.090 に答える
1

NaNは、たとえば次の結果になります。

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

関数では、これらの両方が発生する可能性があります。0 による除算。例: counteris <= 1 の場合。およびは初期化されていません (x1右側の値を現在の値に追加します。これは設定されていないため、ランダムな意味不明です)、関数が値 < 0 の平方根を取得しようとする可能性があります。x2+=

于 2013-10-28T06:48:53.803 に答える
0

あなたの式は間違っています。ゼロで除算するか、負の数の平方根をとっています。

あなたの式をチェックしてください!

追加情報:

NaN は「非数」です。これは、log(-1) や sqrt(-4) などの無効な結果を通知する IEEE 浮動小数点値です。

さらに、正の無限大と負の無限大も浮動小数点値であることを知っておいてください。

于 2013-10-28T06:50:21.237 に答える