在Python中,我需要获取以2为底的正整数向下取整后的对数,包括大数。
但是,由于使用了浮点数计算,可能会得到错误的结果,例如:
然而:
但是,由于使用了浮点数计算,可能会得到错误的结果,例如:
>>> import math
>>> int(math.log(281474976710655, 2))
48
然而:
>>> 2 ** 48
281474976710656
因此,正确的结果应该向下取整为47。
我如何获取正确的值?
.bit_length
比将数字转换为二进制字符串更有效。顺便说一句,在Python 2.6+中,使用format(n, 'b')
比bin
更方便,因为你不会得到那个讨厌的'0b'
。 - PM 2Ring