私はの非合理的な数字を試しています。 sqrt(13)、Pythonを使用しています。私は、最初の10かそこらの反復のために正確であるかなり良い解決策を求めていますPythonで不合理な数値の精度を向上させるために
- 現在の残りの現在の残り
- 追加フロアとして元の番号を設定した係数
- のリストに、新しい剰余を定義します新しい余りが0
これは後の反復、を除いて、非常によく動作しない限り、現在の残りのマイナス床
私の質問は、非合理的な数字を扱う方法がある場合です。プレースホルダのように(後で置き換えるために)、より正確にはsqrt(13)?
私の現在のコードは以下の通りです:結果の出力で
import math
def continued_fraction(x, upper_limit=30):
a = []
# should in fact iterate until repetitive cycle is found
for i in range(upper_limit):
a.append(int(x))
x = 1.0/(x - a[-1])
return a
if __name__ == '__main__':
print continued_fraction(math.sqrt(13))
:
[3, 1, 1, 1, 1, 6,
1, 1, 1, 1, 6,
1, 1, 1, 1, 6,
1, 1, 1, 1, 6,
1, 1, 1, 1, 7, 2, 1, 4, 2]
そして、私は結果の出力は、無限の繰り返しが続き、3でなければならないこと、事実を知っていますProject Euler Problem 64(私が解決しようとしている)のようなサイクル(1,1,1,1,6)。
'decimal'モジュールから' Decimal'クラスを試すことができます – slezica
@slezicaありがとうございました。これはかなり助けになりますが、エラーは係数15〜30で始まることがあります。 –