标准偏差的输出是 NaN - C++
output is NaN for standard deviation - C++
我的客户端程序中有一个进程遍历自定义向量,并执行一些计算来计算标准差。它将风速从 m/s 转换为 km/h,因此要转换为 *3.6。对于我的 sigma 值,当然还有需要 sigma 值的标准差,我的输出是 NaN,我不明白为什么会这样。
Main.cpp:
float sum;
float convertedspeed[windlog.size()];
float sigma;
float averagespeed;
//float conversion;
float sd;
int nrofel;
ofstream ofile("testoutput.csv");
ofile << "WAST, S, \n";
for(int i = 0; i < windlog.size(); i++){
nrofel = windlog.size();
convertedspeed[i] = (windlog[i].speed*3.6);
sum += convertedspeed[i];
averagespeed = (sum/nrofel);
sigma += (convertedspeed[i] - averagespeed)*(convertedspeed[i] - averagespeed);
sd = sqrt(sigma/(nrofel - 1));
我的所有值都没有问题,除非它达到 sigma,所以我预计它在那里会出错。可能是什么问题?
使用前必须先初始化变量。
严格来说,在这种情况下,您不必初始化nrofel
、averagespeed
和sd
,因为它们在循环中被分配了一些值,而没有被读取作业。
另一方面,您必须初始化 sum
和 sigma
,因为它们的值是在赋值之前读取的。
我的客户端程序中有一个进程遍历自定义向量,并执行一些计算来计算标准差。它将风速从 m/s 转换为 km/h,因此要转换为 *3.6。对于我的 sigma 值,当然还有需要 sigma 值的标准差,我的输出是 NaN,我不明白为什么会这样。
Main.cpp:
float sum;
float convertedspeed[windlog.size()];
float sigma;
float averagespeed;
//float conversion;
float sd;
int nrofel;
ofstream ofile("testoutput.csv");
ofile << "WAST, S, \n";
for(int i = 0; i < windlog.size(); i++){
nrofel = windlog.size();
convertedspeed[i] = (windlog[i].speed*3.6);
sum += convertedspeed[i];
averagespeed = (sum/nrofel);
sigma += (convertedspeed[i] - averagespeed)*(convertedspeed[i] - averagespeed);
sd = sqrt(sigma/(nrofel - 1));
我的所有值都没有问题,除非它达到 sigma,所以我预计它在那里会出错。可能是什么问题?
使用前必须先初始化变量。
严格来说,在这种情况下,您不必初始化nrofel
、averagespeed
和sd
,因为它们在循环中被分配了一些值,而没有被读取作业。
另一方面,您必须初始化 sum
和 sigma
,因为它们的值是在赋值之前读取的。