我正在尝试计算数组的标准偏差,但我的答案返回为0。我认为问题出在“计数”弄乱了。我从中接收数据的数组只是1,4,6,7的四个数字。代码将答案输出为0,但这是不正确的。任何帮助将非常感激。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cmath>
#include <string>

using namespace std;
double mean(double *mydata, double N);
double standard_dev(double *mydata, double m, int N);

int main()
{
    int N(0);
    char filename [100];
    double m, stdev;
    double next;

    int count=0;
    cout<<"Enter name of file: ";
    cin>>filename;

    ifstream myfile;
    myfile.open(filename);
    while(myfile>>next)
    {
        count++;
    }

    N=count;
    double *mydata;
    mydata=new double[N];

    for(int i=0; i<N; i++)
    {
        myfile>>mydata[i];
    }
    m =  mean(mydata, N);
    stdev = standard_dev(mydata, m, N);
    cout<<"The standard deviation is:" <<stdev<<endl;

    myfile.close();
    delete[] mydata;
    return 0;
}

double mean(double *mydata, double N)
{
    double sum(0), m;
    for(int i=0; i<N; i++)
    {
        sum +=mydata[i];
    }
    m=(sum/(double)N);
    return (m);
}
double standard_dev(double *mydata, double m, int N)
{
    double *mydata2= new double [N];
    for(int i=0; i<N; i++)
    {
        mydata2[i]= pow((mydata[i]-m),2);
    }
    double sum(0), S, X;
    for(int i=0; i<N; i++)
    {
        sum+=mydata2[i];
    }
    X=sum/N;
    S=sqrt(X);
    return (S);
}

包含4个数字的数组的代码如下:
1个
4
6
7
它们在编码中是垂直的。

最佳答案

您正在读取错误的数据。首先,您将所有数据读入next以增加count。然后,您尝试使用for循环读取不存在的数据。我建议您使用std::vector以避免动态内存分配的问题。

vector<double> mydata;
while(myfile>>next)
{
    mydata.push_back(next);
}

另一个最简单的解决方案是将元素数量放入文件中。例如:

文件:



然后从文件中读取N并使用for循环

关于c++ - 标准偏差计算输出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23066659/

10-13 03:27