TIM Labs

√2を連分数で分数のままどんどん近似してみた

| コメント(0) | トラックバック(0)
RenbunsuunoFushigi.jpg黄金比のときは、連分数の計算に、[1,1..]のリストを使ったのだが、実はこのリストを適当に変えるだけでいろいろな数が求められるのだ。

連分数の分子部分が常に1になっているものを正則連分数という。
このとき、分母になる数だけを並べ、さらに最初の分数の前に加えられる数を;の前に置いた表現がある。

黄金比の場合には、 [1;1,1,1,..] となって全部1になってしまう。

この表記でいくと、√2(2の平方根)は、[1;2,2,2,...] となる。
詳しいことは、Wikipediaの√2の説明、あるいは連分数を見て確認して欲しい。

ということで、√2の連分数のn次近似は、リスト [1,2,2,...,2] (2がn個) を用意すれば計算できる。

*Main Data.List Data.Ratio> let ratSqrt2 n = foldr (\x y -> x+1/y) (1%1) (1 : (take n [2,2..]))

*Main Data.List Data.Ratio> ratSqrt2 10
11482 % 8119
*Main Data.List Data.Ratio> ratSqrt2 20
77227930 % 54608393

これで分数としては良いはずだが、分かりにくいので浮動小数点表示させてみよう。

*Main Data.List Data.Ratio> fromRational (ratSqrt2 10)
1.4142135731001355
*Main Data.List Data.Ratio> fromRational (ratSqrt2 20)
1.4142135623730954
*Main Data.List Data.Ratio> fromRational (ratSqrt2 30)
1.4142135623730951
*Main Data.List Data.Ratio> sqrt 2
1.4142135623730951

20次でほぼ有効範囲になっているようだ。収束の速度はまあまあか。

しかし、計算してみたい数といったら√2ではなくて、あれだろう。

トラックバック(0)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/335

コメントする

このブログ記事について

このページは、fujiが2012年11月28日 10:00に書いたブログ記事です。

ひとつ前のブログ記事は「フィボナッチ数列の一般項を計算する(※ただし有理数に限る)」です。

次のブログ記事は「円周率の連分数展開」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。