在 C 中记录调用 return NaN

Log calls return NaN in C

我有一个双精度数组:

double theoretical_distribution[] = {1/21, 2/21, 3/21, 4/21, 5/21, 6/21};

我正在尝试将其熵计算为:

double entropy = 0;

for (int i = 0; i < sizeof(theoretical_distribution)/sizeof(*theoretical_distribution); i++) {
    entropy -= (theoretical_distribution[i] * (log10(theoretical_distribution[i])/log10(arity))); 
}    

但是我得到的是 NaN,我已经检查了部分

(theoretical_distribution[i] * (log10(theoretical_distribution[i])/log10(arity)))  

并发现它是 return NaN 本身,所以我认为它是罪魁祸首,但它应该只是对日志的简单基础转换?我是否遗漏了一些有关它的数学细节?
为什么它评估为 NaN。

您正在将 0 传递给 log10 函数。

这是因为您的数组 theoretical_distribution 正在填充整数计算产生的常量值,所有这些值的分母都大于分子。

您可能打算进行浮动计算,因此至少使分子或分母之一成为浮动常量。