1.#QNAN0计算标准差C时输出
1.#QNAN0 output when calculating standard deviation C
我写了一个计算标准偏差的函数,结果总是'1.#QNAN0',我试过用不同的方式格式化它,但我找不到解决方案。昨天在另一台电脑上运行,我能做些什么吗?
void CalcStandardDeviation(int count, int* nums, double mean, FILE* output){
int k;
double std=0,a;
for (k=0; k<count; k++){
a=nums[k]-mean;
std=std+(a*a);
}
std/=(count);
std=sqrt(std);
fprintf(output,"Standard deviation: %f\r\n",std);
fprintf(output,"\r\n");
}
一个 NaN 在您的代码中只能有三个来源:
mean
是一个 NaN.
- 在
std/=(count);
如果 count
是 0.
- 在
std=sqrt(std);
中如果此时std
是一个负数(在你的情况下似乎不可能)。
您应该调试您的代码并观察 count
和 mean
值(或 print/export 它)以找到原因。
当您将一个变量声明为一种类型并且在打印时您以不同的格式提供该变量时,就会发生这种情况。
例如,如果您将x声明为整数,然后在打印x时,您将x指定为%f,那么您可能会得到它。我以同样的方式得到了这个。
View the image I posted
我写了一个计算标准偏差的函数,结果总是'1.#QNAN0',我试过用不同的方式格式化它,但我找不到解决方案。昨天在另一台电脑上运行,我能做些什么吗?
void CalcStandardDeviation(int count, int* nums, double mean, FILE* output){
int k;
double std=0,a;
for (k=0; k<count; k++){
a=nums[k]-mean;
std=std+(a*a);
}
std/=(count);
std=sqrt(std);
fprintf(output,"Standard deviation: %f\r\n",std);
fprintf(output,"\r\n");
}
一个 NaN 在您的代码中只能有三个来源:
mean
是一个 NaN.- 在
std/=(count);
如果count
是 0. - 在
std=sqrt(std);
中如果此时std
是一个负数(在你的情况下似乎不可能)。
您应该调试您的代码并观察 count
和 mean
值(或 print/export 它)以找到原因。
当您将一个变量声明为一种类型并且在打印时您以不同的格式提供该变量时,就会发生这种情况。
例如,如果您将x声明为整数,然后在打印x时,您将x指定为%f,那么您可能会得到它。我以同样的方式得到了这个。 View the image I posted