我试图编写一个简单的程序来确定输入整数是否是2的幂。
我有以下代码。它将使n=536870912的测试用例失败(5368709122^29)。
我试着格式化数字,format(y,'12g')输出接近0但不等于03.43965 e-07
我该如何克服这个数字问题?

    s= math.log(n,2)
    [sh,y]=divmod(s,1)

    if y!=0:
    #if format(yu,'20f')!=format(0,'20f') :
        return False
    else:
        return True

最佳答案

如果要比较浮动并允许有一点浮点误差,通常会检查它们是否在彼此允许的某个距离内(if abs(x-y) < epsilon)。
但是,如果要确定整数是否为2的幂,可以这样做:

def ispoweroftwo(n):
    return (n>0 and (n&-n)==n)

这是根据符号数的AA>表示规则进行的。
>>> ispoweroftwo(536870911)
False
>>> ispoweroftwo(536870912)
True

10-06 11:14