【发布时间】:2016-05-05 23:18:25
【问题描述】:
我有一个双精度数组:
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/21-->1.0/21同上。 -
整数除法截断,结果为0。0的对数为NaN。
-
@Mark Ransom "0 的日志是 NaN" 或者可能是 -INF。 OP 等式的其余部分是 NaN。