gpt4 book ai didi

c++ - 标准偏差计算输出不正确

转载 作者:行者123 更新时间:2023-11-30 04:06:01 28 4
gpt4 key购买 nike

我正在尝试计算数组的标准偏差,但我的答案返回为 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);
}

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

文件:

4 1 4 6 7

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com