微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python math.log(x,base) 结果的精度错误

如何解决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 = 56boundary = 175617max_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 举报,一经查实,本站将立刻删除。