我试图编写一个简单的程序来确定输入整数是否是2的幂。
我有以下代码。它将使n=536870912
的测试用例失败(536870912
是2^29
)。
我试着格式化数字,format(y,'12g')
输出接近0
但不等于0
,3.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