如何解决python math.log(x,base) 结果的精度错误
Python math.log(x,base) 功能在结果中给出了一个微小的错误,这破坏了我的功能。我正在尝试解决一个问题,在该问题中我需要获取一个数字可以达到的索引,以便它小于定义的边界
即,对于 a**i < boundary
我想知道 'i' 的最大可能值,其中 'a' 和 'boundary' 作为输入提供。 i
和 'a` 是整数
为了获得 i 的最大值,我编写了以下逻辑:
max_i = int(math.log(boundary-1,a))
此逻辑在多种情况下都失败了。例如:a = 56
和 boundary = 175617
,max_i
应该是 3,因为 56**3
(56 的 3 次方)是 175616(比给定的边界小 1)。下面是相同的证明
>>> math.log(175616,56)
2.9999999999999996
>>> 56**3
175616
由于这个微小的差异,max_i
变成了 2 而不是 3。什么可以解决这个精度问题?我尝试按照某些论坛中的建议将 a 和边界转换为浮点数,但这似乎并没有改变结果
编辑:抱歉,我忘了提到我已经写了一个类似于蒂埃里评论的内容的快速修复。我正在检查是否有办法通过在包级别提出修复来摆脱浮点运算
解决方法
如果您只想快速解决问题,您可以在那里添加一个额外的检查:
if base**(max_i+1) <= limit:
max_i = max_i + 1
这只是检查大于整数值的数字是否也满足条件,如果满足,则替换初始值。轻松摆脱这个浮点错误:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。