Almkvist-Giullera formula for pi

func almkvist_giullera(n) {
    (32 * (14*n * (38*n + 9) + 9) * (6*n)!) / (3 * n!**6)
}

func almkvist_giullera_pi(prec = 70) {

    local Num!PREC = (4*(prec+1)).numify

    var sum = 0
    var target = -1

    for n in (0..Inf) {
        sum += (almkvist_giullera(n) / (10**(6*n + 3)))
        var curr = (sum**-.5).as_dec
        return target if (target == curr)
        target = curr
    }
}

say 'First 10 integer portions: '

10.of {|n|
    say "#{n} #{almkvist_giullera(n)}"
}

with(70) {|n|
    say "π to #{n} decimal places is:"
    say almkvist_giullera_pi(n)
}

Output:

Last updated

Was this helpful?