RosettaCodeData/Task/Arithmetic-geometric-mean/Ruby/arithmetic-geometric-mean-2.rb

17 lines
269 B
Ruby

require 'bigdecimal'
PRECISION = 100
EPSILON = 0.1 ** (PRECISION/2)
BigDecimal::limit(PRECISION)
def agm(a,g)
while a - g > EPSILON
a, g = (a+g)/2, (a*g).sqrt(PRECISION)
end
[a, g]
end
a = BigDecimal(1)
g = 1 / BigDecimal(2).sqrt(PRECISION)
puts agm(a, g)