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)
大整数输入正以有限的精度转换为浮点数,因此有些输入精度会丢失。而且,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)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |