我编写了这段代码来使用欧几里得算法计算有理数 N 的连分数展开式:
from __future__ import division
def contFract(N):
while True:
yield N//1
f = N - (N//1)
if f == 0:
break
N = 1/f
如果说 N 是 3.245,则函数永远不会结束,因为显然 f 永远不会等于 0。展开的前 10 项是:
[3.0、4.0、12.0、3.0、1.0、247777268231.0、4.0、1.0、2.0、1.0]
这显然是一个错误,因为实际的扩展只是:
[3;4,12,3,1] 或 [3;4,12,4]
是什么导致了这里的问题?是某种舍入误差吗?