これは私のコードで、math.logを使ってintのログを検索しようとしています。 私は不正確なログを解決するための方法のほとんどを試してみましたが、何もコードの私の作品動いていないようにみえ:値をチェックするPythonのmath.logは、より大きい整数での不正確な出力ですか?
num = 810333333333333333253432343224234
print(num)
getcontext().prec = 100 # set the precision (no. of digits)
getcontext().rounding = ROUND_DOWN # this will effectively truncate
logA = Decimal(math.log(num,2))
print(logA)
#find num using component of logs
seedfrac = Decimal(logA - int(logA))
nonfrac = 2**int(logA)
frac = Decimal(2**seedfrac)
print(Decimal(frac*nonfrac))
#find num directly
print(Decimal(2**logA))
出力を:あなたは任意の回避策を知っていれば
810333333333333333253432343224234
109.320214523928456173962331376969814300537109375
810333333333340688230991571062453.5576735355138989553226940926052307835750320132600744995177525695124
810333333333340688230991571062453.5576735355138989553226940926052307835750320132600744995177525695128
は、感謝を返信してください。
あなたはどのような出力を期待していましたか? –
ちょうど推測ですが、計算のある時点で浮動小数点数があります。それが必要なのであれば、 'Decimal'をつけるだけで正確です:P – Peter
Python 3にはより正確なタッチである' math.log2'があります'math.log'を' 2.0'のベースで使用するよりも簡単です。ところで、これは何のために使っていますか? Pythonの浮動小数点数の精度はほとんどの現実のものでは不十分であることは珍しいことです。あなたが探しているものを行う良い方法があるかもしれません(例えば 'int.bit_length'メソッドのように、あなたが望むものがログベース2のフロアなのかどうかなど)。 –