java - 如何检查一个数 < 1 是否是 2 的幂?

标签 java algorithm math

例如: 0.5 和 0.25 是 2 的幂,但 0.3 不是,我也知道检查整数是否是 2 的幂很容易,但是如果数字 < 1,如何确定数字是否是 2 的幂?

public bool isPowerOf2(float number){
    if(number>1){
        //easy to write
    }else if(number==1){
        return true;
    }else{
        //hard to write
    }
}

最佳答案

试试这个解决方案:

public boolean isPowerOf2(float number){
    if(number>1){
        //easy to write
    }else if(number==1){
        return true;
    }else if(number>0){
        return isPowerOf2(1.0f/number);
    }else
        return false;
}

顺便说一句,你可以通过检查浮点二进制表示的位来简单地解决这个问题:

public static boolean isPowerOfTwo(float i) {
    int bits = Float.floatToIntBits(i);
    if((bits & ((1 << 23)-1)) != 0)
        return ((bits & (bits-1)) == 0); // denormalized number
    int power = bits >>> 23;
    return power > 0 && power < 255; // 255 = Infinity; higher values = negative numbers
}

关于java - 如何检查一个数 < 1 是否是 2 的幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30206831/

相关文章:

java - 带回溯的数独算法 - java

Java:在不改变其类型的情况下乘以泛型数字

java - 替换句号\\。与空间\。空间

java - IOException : stream closed error while reading multiple files from HDFS

java - 如何从 JUnit 内部使用 Voldemort 服务器?

java - BODMAS系统的加法和减法

c - 一个很好的引用卡/备忘单,其中包含 C 中的基本排序算法?

java - 进行年龄验证的最佳方法是什么?

c++ - Visual C++ 中的浮点精度

java - Java矩阵数学库的性能?