#!/usr/bin/ruby

func continued_fraction(a, b, n=100) {
    a.run + (n > 0 ? (b.run / continued_fraction(a, b, n-1)) : 0);
}

var f = Hash.new(
    "√2" => [
        do { var n = 0; { n++ ? 2 : 1 } },
        { 1 },
    ],
    "e" => [
        do { var n = 0; { n++ || 2 } },
        do { var n = 0; { n++ || 1 } },
    ],
    "π" => [
        do { var n = 0; { n++ ? 6 : 3 } },
        do { var n = 0; { (2*(n++) + 1)**2 } },
        1_000,
    ],
    "π/2" => [
        do { var n = 0; { 1/(n++ || 1) } },
        { 1 },
        1_000,
    ]
);

f.each { |k,v|
    printf("%3s ≈ %.9f\n", k, continued_fraction(v...));
};