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我怎样才能解决这个normalpow评估到的问题0

#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);
}

然后在你的 main 中调用它:

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。

因此meanpopmean和在初始化stdev时都是 0 normalpow,并且初始化导致

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

这给出了一个 NaN。

之后您永远不会更改normalpow,因此任何涉及它的计算都会导致 NaN。

于 2012-11-13T23:18:09.383 回答
0

这取决于如何计算meanpopmean计算。mean - popmean如果它们相同,则计算为零:mean == popmean.

于 2012-11-13T23:01:58.187 回答
0

而且您使用的公式不正确,因为您没有计算标准偏差的平方。

于 2012-11-13T23:12:10.173 回答