java - 没有 java.lang.Math 的二进制对数?

标签 java math logarithm

如何在不使用Math的情况下执行二进制对数? 现在我有了这个 Math.log(x)/Math.log(2) 并且它可以工作,但我无法使用 java.lang.Math

我能做什么?

int bits_necessaris = (int)(log2(nat + 1)); // This is correct

// The function where I'm having trouble

public static int log2(int x) {
    return (something);
}

重要:当我执行 Math.log(7)/Math.log(2) 时,我得到 2.80XXXXX

所以我这样做了:

(int) Math.ceil(Math.log(7) / Math.log(2));

我得到ceil(2.80XXXXX) = 3

函数的返回值必须向上舍入,例如,如果解为 6.777,则返回值必须为 7。

最佳答案

您想知道表示一个 int 需要多少位?然后还有更简单的解决方案,例如:

int bitsNeededFor(int i) {
    int bits = 0;
    while (i > 0) {
        bits++;
        i /= 2;
    }
    return bits;
}

再想一想,以下内容更快、更容易理解:

int bitsNeededFor(int i) {
    return 32 - Integer.numberOfLeadingZeros(i);
}

关于java - 没有 java.lang.Math 的二进制对数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312492/

相关文章:

algorithm - 登录实际上是什么意思?

javascript - 麦克风输入电平的对数函数的反函数

java - 如何创建一个基本的 Java 服务器?

java - Maven 不使用本地存储库

c# - OxyPlot 画圆不正确(有间隙)

java - 在java中使用正则表达式进行数学表达式?

python - 求解 x^2 + y^2 + z^2 = N 得到 x, y, z 的所有唯一组合

java - 如何从ActiveMQConnectionFactory获取ActiveMQConnection?

java - Spring security Remember-me 无法正常工作,数据库表无法正常工作

python - Python中对数计算的底数会影响速度吗?