我有一个双数组:
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进行评估。
答案 0 :(得分:3)
您正在将0
传递给log10
函数。
这是因为您的数组theoretical_distribution
正在填充整数计算产生的常量值,所有这些值的分母都大于分子。
你可能想要浮动计算,所以至少要使分子或分母中的一个成为浮动常数。