簡體   English   中英

Python中的精確math.log(x,2)

[英]Precise math.log(x, 2) in Python

在python中,我需要得到基數為2的正整數的向下舍入,包括大數。

但是,由於使用了浮點數學,我可能會得到不好的結果,例如:

>>> import math
>>> int(math.log(281474976710655, 2))
48

然而:

>>> 2 ** 48
281474976710656

因此,向下舍入的正確結果應為47。

我怎樣才能得到正確的價值?

在Python 3中,整數有一個.bit_length方法,所以你應該使用它來得到你的舍入基數2對數。

這是一個簡短的演示:

m = 2 ** 1000
for n in (281474976710655, m-1, m, m+1):
    a = n.bit_length() - 1
    b = 2 ** a
    print(a, b <= n < 2 * b)

產量

47 True
999 True
1000 True
1000 True

在python 3 int甚至有一個高效的.bit_length()方法!

>>> (281474976710655).bit_length()
48
>>> (281474976710656).bit_length()
49

在python 2中,不使用浮點數學,而是計算位數:

def log2(n):
    assert n >= 1
    return len(bin(n)) - 3  # bin() returns a string starting with '0b'

(在此評論后 編輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM