错误的输出数学.log

2024-04-27 02:19:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算一个非常大的数(<;=10^19)的最接近的2^n

我试过使用数学.log(数字,2)。但对于非常大的数字来说,这是错误的结果。在不使用其他库的情况下,我应该如何做到这一点?你知道吗

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

Tags: andltlognumberis错误情况any
1条回答
网友
1楼 · 发布于 2024-04-27 02:19:27

大整数输入被转换成精度有限的浮点,因此some input precision is being lost。而且,math.log2()更精确数学.log()因为它对基2进行了微调。你知道吗

有一个int方法将在精确的bit_length()上失效:

>>> a = 9843649374639837463
>>> a.bit_length()
64
>>> bin(a)
'0b1000100010011011101010101111001111001100111001110101000100010111'

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

>>> a = 9843649374639837463
>>> 2.0 ** math.log2(a)
9.843649374639845e+18
>>> abs(a - 2.0 ** math.log2(a))
8192.0

相关问题 更多 >