自然対数の底eを連分数展開で計算する

自然対数の底eといえば

e = \lim_{x \to \infty}(1 + \frac{1}{x})^x

ですが、これを連分数展開すると

e = 2 + \frac{1}{1 + \frac{1}{2 + \frac{2}{3 + \frac{4}{4 + \frac{4}{\ldots}}}}}

となるそうです。面白いですね。

Schemeで書いてみました。

;;(+ 2 (/. 1 (+ 1 (/ 1 (+ 2 (/ 2 (+ 3 (/ 3 (+ 4 (/ 4 (+ 5 (/ 5 (+ 6 (/ 6 (+ 7 0)))))))))))))))

(define (e)
  (let loop ((i 1) (f (lambda (v) (+ 2 (/. 1 v)))))
    (if (> i 100)
      (f 1)
      (loop (+ i 1) (lambda (v) (f (+ i (/ i v))))))))

(define (main args)
  (print (e))
  0)

実行すると

% gosh e.scm
2.7182818284590455

あってそう。