#!/usr/bin/env ruby # From: http://imetrics.co.jp/math2/Pi-with-Ruby.pdf require "bigdecimal" require "benchmark" result = Benchmark.realtime do prec = 10 conv = 6 a = BigDecimal("1") b = BigDecimal("1") / BigDecimal("2").sqrt(prec) t = BigDecimal("1") / 4 p = BigDecimal("1") for n in 1..conv do an = (a + b) / 2 b = (a * b).sqrt(prec) t -= p * (an - a) * (an - a) p *= 2 a = an end puts (a + b) * (a + b) / (4 * t) end puts "Time: #{result}s" include Math a=1.0; b=1/sqrt(2); t=1.0/4; p=1.0 6.times do an = (a+b)/2 b = sqrt(a*b) t -= p*(an-a)*(an-a) p *= 2 a = an p a end puts (a + b) * (a + b) / (4.0 * t)