In honor of Pi Day, I thought I would write a little Ruby script to generate pi to a few decimal places.
A quick trip to the Wikipedia page for pi turned up many formulas for computing pi. I took one of the easy ones and set about writing some code.
Most of the formulas involve the factorial function. Unfortunately, Ruby doesn’t have a built in method for computing the factorial. After a little Googling, I found a nice, functional example at the Rosetta Code wiki.
Putting that all together, I ended up with this:
def fact(n)
(1..n).reduce(1, :*)
end
sum = 0.0
(0..8).each do |n|
a = fact(2 * n) ** 3.0
b = 42.0 * n + 5.0
c = fact(n) ** 6.0
d = 16.0 ** (3.0 * n + 1.0)
sum += (a * b) / (c * d)
puts 1.0 / sum
end
Note that I’m only iterating 8 times. On my PC, that gives pi out to 15 decimal places which is all of the precision available in a floating point number.