2017-10-17 111 views
0

我已经计算出代码并找到了解决k > 6最大分母非常大的问题的方法。但是,当我的代码,例如增加了Python - 用于计算形式1/r的k个分数的算法,总计为1

1/float(2) + 1/float(3) + 1/float(7) + 1/float(42) 

python说,这不等于1,但它应该是。为什么python认可其他和等于1而不是这个?

+0

使用fp-math时的附加信息:等式检查通常遵循[numpy]的方法(https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.isclose.html )。 – sascha

+0

埃及分数很有趣。在Python中使用它们的简单方法是使用分数模块。 –

+0

FWIW,这是我发现的一些列表,您可能会发现它们在测试代码时很有用。这些是给定长度的最小最高分母(没有重复分数)的列表:6 [2,3,15,18,35,63],7 [2,3,15,28,35,44,77], 8 [2,4,6,20,58,130,174,377]。我很确定6和7是正确的,但如果有更好的解决方案8,我不会感到惊讶。 –

回答

0

你需要非常小心硬比较任何十进制值。计算机不提供无限精度,因此它可能是你的论点加起来像0.99999998而不是1。然后比较可能失败

因此,你应该总是比较相应的允许差异delta,就像1 - 0.99999998 < delta其中delta = 0.0001或类似的东西。