Python math.log(x,base(功能在结果中出现了一个微小的错误,这破坏了我的功能。我正试图解决一个问题,我需要得到一个数字的索引,直到它小于定义的边界
即,对于a**i < boundary
,我想知道"i"的最大可能值,其中提供"a"one_answers"边界"作为输入。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
由于该微小差异,CCD_ 7变为2而不是3。如何解决这个精度问题?我试着按照一些论坛中的建议将a和boundary转换为float,但这似乎并没有改变的结果
编辑:抱歉,我忘了提到我已经写了一个类似于Thierry评论的快速修复程序。我正在检查是否有一种方法可以通过在包级别上提出修复方案来消除浮点操作
如果你只想快速破解问题,你可以在那里添加一个额外的检查:
if base**(max_i+1) <= limit:
max_i = max_i + 1
这只需检查大于整数值的数字1是否也满足条件,如果满足,则替换初始值。轻松摆脱这个浮点错误:(