[英]Dealing with accuracy in Python math operations
我試圖編寫一個簡單的程序來確定輸入整數是否為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(xy) < epsilon
)。
但是,如果你想知道一個整數是2的冪,你可以這樣做:
def ispoweroftwo(n):
return (n>0 and (n&-n)==n)
這符合簽名數字的二進制補碼表示規則。
>>> ispoweroftwo(536870911)
False
>>> ispoweroftwo(536870912)
True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.