入力整数が2のべき乗かどうかを判断する簡単なプログラムを作成しようとしていました。Python数学演算の精度を扱う
私は以下のコードを持っていました。 n=536870912
(536870912
は2^29
)のテストケースは失敗します。
Iは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
'math.log(536870912、2)' = '29.000000000000004' –
関連するhttp://stackoverflow.com/q/588004/794749 –
'math.log'は整数を返しません。浮動小数点数を返します。だからあなたのdivmodがあなたに期待された結果を与えるわけではありません。 –