java - 在 Java 中以 2 为基数记录 double

标签 java math entropy

我正在尝试使用以下 Java 函数计算英语的熵

public static void calculateEntropy()
    {
        for(int i = 0; i < letterFrequencies[i]; i++)
        {
            entropy += letterFrequencies[i] * (Math.log(letterFrequencies[i])/Math.log(2));
        }
        entropy *= -1;
    }

我使用的公式需要以 2 为底的对数,但 Java 只有自然对数和以 10 为底的对数。我正在尝试使用基数公式的变化来获取 letterFrequencies[i] 的以 2 为底的对数。我不知道我是否正确实现了它,因为我期待一个接近 4.18 的答案,但却得到大约 .028

最佳答案

问题出在for的停止条件:

i < letterFrequencies[i]应该是 i < letterFrequencies.length .

此外,我会使用 Guava's DoubleMath.log2() method ,按照@LutzL 的建议进行了优化。

关于java - 在 Java 中以 2 为基数记录 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28414046/

相关文章:

java - 如何将android电子邮件源代码导入到eclipse项目中?

java - 带有 Applet 和 JPanel 菜单的 JFrame

C# 使数字向上舍入产生不准确的结果

math - 在 Sage 中使用(分配)变量的方法

r - 我无法计算出 TraMineR 的熵公式

r - 为什么均匀分布的熵低于 R 中的重复值?

java - 从哈希码中检索对象。

java - Spring RDBMS 与 JDBCTemplate

algorithm - 使用分治法从给定列表中找到第二小的数字

c++ - 图片熵计算