0

平均のサンプリング分布の結果を返す小さなプログラムを作成することで、データ統計の作業を少し楽にできると思いました (標準誤差付き)。この部分は正常に実行されますが、ここで見つけた数式を使用して z スコアを返そうとすると、 が返されます-1#IND。その式の私の解釈は次のとおりです。

((1 / (sqrt(2 * pi) * stdev)) * pow(e, (normalpow))

どこ

double normalpow = -0.5 * ((mean - popmean) * (mean-popmean) / stdev)

私はもう少し調査を行い、それが何にでも(mean - popmean) * (mean - popmean)評価されていることを発見しました。に評価される0というこの問題をどのように回避できますか。normalpow0

#include <iostream>
#include <string>
#include <sstream>
#include <math.h>


using namespace std;

double number  ;
double mean ;
double popmean ;
double stdev ;
double square = 2;
double e = 2.71828182845904523536;
double pi = 3.14159265358979323846;
double normalpow = -0.5*((mean-popmean)*(mean-popmean)/stdev);
int main ()
{
    string continuer ;
    do
    {
        cout << "Enter Sample Mean: " << endl;
        cin >> mean;
        cout << "Enter Population Mean: " << endl;
        cin >> popmean;
        cout << "Enter Standard Deviation: " << endl;
        cin >> stdev;
        cout << "Enter Sample Size: " << endl;
        cin >> number;
        if (stdev == 0)
            cout << ((mean-popmean)/(number))<< endl;
        else
        {
            cout << ((mean-popmean)/((stdev)/(sqrt(number))))<< endl;
            cout << ((1/(sqrt(2*pi)*stdev))*pow(e, (normalpow)))<< endl;
        }
        cout << "If you want to continue, Press Y" << endl ;
        cin >> continuer;
    } while (continuer == "Y" || continuer == "y") ;
    return 0;
}
4

4 に答える 4

2

あなたの問題はここにあります:

double normalpow = -0.5*((mean-popmean)*(mean-popmean)/stdev);

この時点でmeanpopmeanstdevは初期化されていないため、ガベージ値を持っています。あなたが望むのは関数のようです。

double normalPow(double mean, double popmean, double stddev)
{
  return -0.5*((mean-popmean)*(mean-popmean)/stdev);
}

次に、メインで呼び出します。

double normalpow = normalPow(mean, popmean, stdev);

もちろん、関数内でstdev等しいか近いかを確認する必要0.があります。

于 2012-11-13T23:17:53.663 に答える
1
using namespace std;

double number  ;
double mean ;
double popmean ;
double stdev ;
double square = 2;
double e = 2.71828182845904523536;
double pi = 3.14159265358979323846;
double normalpow = -0.5*((mean-popmean)*(mean-popmean)/stdev);

これらはすべて静的ストレージ期間を持つ変数であるため、明示的な初期化子がないものは 0 に初期化されます。

したがってmeanpopmeanstdevは が初期化されるとすべて 0 にnormalpowなり、その初期化の結果は

double normalpow = -0.5*(0.0*0.0/0.0);

これは NaN を返します。

後で変更することはないnormalpowため、それを含む計算はすべて NaN になります。

于 2012-11-13T23:18:09.383 に答える
0

また、標準偏差の二乗を計算していないため、使用している式は正しくありません。

于 2012-11-13T23:12:10.173 に答える
0

これは、meanpopmeanの計算方法によって異なります。mean - popmeanそれらが同一である場合、ゼロに評価されます: mean == popmean.

于 2012-11-13T23:01:58.187 に答える