擅长:python、mysql、java
<p>您遇到<em>浮点累积错误</em>。在</p>
<p>由于当前结果依赖于以前的结果,而float类型只是一个近似值,所以运行的重复次数越多,累积误差增加的越多。在</p>
<p>因为您正在处理有理数,所以我建议使用<code>fraction</code>模块。在</p>
<pre><code>import fractions
def printRecurrence():
x = [0]*51 #initialize list of x values
x[0] = fractions.Fraction(1,1)
x[1] = fractions.Fraction(1,3)
for i in range(1, 50):
x[i+1] = fractions.Fraction(13/3)*x[i] - fractions.Fraction(4/3)*x[i-1]
print(float(x[i]),3**(-i),x[i]-3**(-i))
</code></pre>
<p>打印重复()</p>
<p>我已经打印了结果,<code>3**-n</code>的计算值和差值:</p>
^{pr2}$
<p>在20次复发后,差别会增加,但已经好多了。在</p>
<p>编辑:davidanswer让我意识到,分数到浮点的转换会破坏一切。在</p>
<p><code>fraction</code>模块只在2个精确计算的整数之间执行除法,但是转换为float会破坏精度。在</p>