2017-10-17 39 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或類似的東西。