用python中的loor of log绕过舍入错误

2024-09-29 06:29:13 发布

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

为了找出某个基数中某个数字的位数,我试图写下这行:

numdigits = math.floor(math.log(num, base)) + 1

其中math.log(num, base)等价于math.log(num)/math.log(base)

但是,在这两种情况下,这有时会导致数字错误。这是因为数学.log是浮点数,因此精度有限。例如,在计算3486784401(3^20)的日志基数3时:

>>> math.log(3486784401, 3)
19.999999999999996

在这里发言将得到19,而正确的答案是20。我知道这是因为浮点数是用二进制表示的,但是我想知道是否有办法解决这个问题。你知道吗

有没有一种方法可以写出一个函数,它以100%的准确度给出任意基数的对数下限?你知道吗


Tags: logbase错误情况精度数字数学math
1条回答
网友
1楼 · 发布于 2024-09-29 06:29:13

是的,有多种方法。你知道吗

  1. 你可以像在你的问题中那样计算位数。然后您可以通过计算base**result(整数形式,这样您就可以得到一个精确的结果)并查看它与原始参数的比较来测试您的结果。将result向上或向下调整1,然后再次测试,直到确定最终结果正确为止。你最多需要3次测试。

  2. 类似地,您可以跳过log测试,只计算base的幂,直到它达到或超过您的参数。这会使事情完全保持整数状态,但会更加耗时。

  3. 当然,另一种方法是实际转换成所需的基数,然后检查位数。当然,这更费时。

相关问题 更多 >