日志调用在C中返回NaN

时间:2016-05-05 23:18:25

标签: c math logarithm

我有一个双数组:

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)))  

并且发现它返回NaN本身,所以我认为它是罪魁祸首,但它应该是一个简单的日志基本转换?我错过了关于数学的一些细节吗? 为什么要对NaN进行评估。

1 个答案:

答案 0 :(得分:3)

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

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

你可能想要浮动计算,所以至少要使分子或分母中的一个成为浮动常数。