我试图编写一个简单的程序来确定输入整数是否为 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
最佳答案
如果您想比较 float 并允许一点 float 不准确,您通常会检查它们是否在彼此允许的特定距离内 (if abs(x-y) < epsilon
)。
但是,如果您想知道一个整数 是否是 2 的幂,您可以这样做:
def ispoweroftwo(n):
return (n>0 and (n&-n)==n)
这根据 two's complement 的规则工作有符号数的表示。
>>> ispoweroftwo(536870911)
False
>>> ispoweroftwo(536870912)
True
关于python - 处理 Python 数学运算的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563797/