C ++ Math评估错误

时间:2012-11-13 22:56:07

标签: c++

我认为通过制作一个返回均值抽样分布结果的小程序(标准误差),我可以在数据统计中让生活更轻松一些。它成功完成了这一部分,但是为了尝试使用我找到here的公式返回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 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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在初始化normalpow时均为0,并且初始化结果为

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

给出了NaN。

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

答案 2 :(得分:0)

这取决于meanpopmean的计算方式。 mean - popmean如果相同则评估为零:mean == popmean

答案 3 :(得分:0)

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