如何检查数字<1是2的幂?

ggr*_*grr 5 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
    }
}
Run Code Online (Sandbox Code Playgroud)

Tag*_*eev 7

尝试此解决方案:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

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
}
Run Code Online (Sandbox Code Playgroud)