math.log输出错误

Vat*_*hah 2 python floating-point precision logarithm python-3.x

我正在尝试计算到非常大的数字的最接近的2 ^ n(<= 10 ^ 19)

我试图使用math.log(number,2)。但这对于很大的数字给出了错误的结果。我应该如何在不使用其他库的情况下执行此操作?

a = 9843649374639837463  # a is any num between 1 and 10^9
number = int(math.log(a,2))
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 6

大整数输入正以有限的精度转换为浮点数,因此有些输入精度会丢失。而且,math.log2()可能比math.log()更准确,因为它针对基数2进行了微调。

有一个int方法将精确地保持不变bit_length()

>>> a = 9843649374639837463
>>> a.bit_length()
64
>>> bin(a)
'0b1000100010011011101010101111001111001100111001110101000100010111'
Run Code Online (Sandbox Code Playgroud)

请注意,浮点日志非常接近,但并不精确:

>>> a = 9843649374639837463
>>> 2.0 ** math.log2(a)
9.843649374639845e+18
>>> abs(a - 2.0 ** math.log2(a))
8192.0
Run Code Online (Sandbox Code Playgroud)