如何区分log2(2 ^ 5910-1)和log2(2 ^ 5910)?两者都给5909.9999999999

时间:2018-11-15 14:07:10

标签: python-3.x floating-point

我正在处理的数字最多为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

0 个答案:

没有答案