我正在处理的数字最多为2 100000 。我被困在这一点上。某些数字不能提供正确的结果,如标题中所示:
>>> math.log(2**5910, 2)
5909.99999999999
>>> math.log(2**5910-1,2)
5909.99999999999
>>> math.log(2**5910+1,2)
5909.99999999999
如何区分log2(2 ^ 5910-1),log2(2 ^ 5910),log2(2 ^ 5910 + 1)? 我想要的是log2(n)的特征是完全正确的,并且我不关心尾数的准确性。但是,如果有一个完美的功效,它应该给出一个整数,或者至少告诉它一个完美的功效。 目前,我正在使用此功能:
def log(n):
c=int.bit_length(n)-1
m=0.5
if(2**c==n):m=0
return c,m