【问题标题】:1.#QNAN0 output when calculating standard deviation C1.计算标准差C时#QNAN0输出
【发布时间】:2015-05-26 11:39:40
【问题描述】:

我编写了一个计算标准偏差的函数,结果始终为“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");
   }

【问题讨论】:

标签: c nan


【解决方案1】:

NaN 在您的代码中只能有三个来源:

  • meanNaN
  • std/=(count); 中,如果count0
  • std=sqrt(std); 中,如果此时std 是负数(在您的情况下似乎不可能)。

您应该调试您的代码并观察countmean 值(或打印/导出)以找出原因。

【讨论】:

  • 谢谢,意思是 NaN。在我的 CalculateMean 函数中,我打印了它但没有返回它。傻
  • (从技术上讲,另一种可能性是nums 中的int 对于double 来说太大了,因此未定义将其转换为double(用于与mean 的减法)按照 C 标准。或者它转换为 ∞,而 mean 已经是 ∞,因此减法产生 NaN。当然,这不会发生在 intdouble 的普通范围内。)
【解决方案2】:

当您将变量声明为 one 类型并且在打印时以不同的格式指定变量时,可能会发生这种情况。

例如,如果您将 x 声明为整数,然后在打印 x 时,您使用 %f 指定 x,那么您可能会得到它。我以同样的方式得到了这个。 View the image I posted

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2021-12-27
    • 1970-01-01
    • 2016-03-12
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2020-08-13
    相关资源
    最近更新 更多