RosettaCodeData/Task/Arithmetic-geometric-mean/Seed7/arithmetic-geometric-mean.seed7
Ingy döt Net 6f050a029e update
2013-06-05 21:47:54 +00:00

30 lines
644 B
Text

$ include "seed7_05.s7i";
include "float.s7i";
include "math.s7i";
const func float: agm (in var float: a, in var float: g) is func
result
var float: agm is 0.0;
local
const float: iota is 1.0E-7;
var float: a1 is 0.0;
var float: g1 is 0.0;
begin
if a * g < 0.0 then
raise RANGE_ERROR;
else
while abs(a - g) > iota do
a1 := (a + g) / 2.0;
g1 := sqrt(a * g);
a := a1;
g := g1;
end while;
agm := a;
end if;
end func;
const proc: main is func
begin
writeln(agm(1.0, 2.0) digits 6);
writeln(agm(1.0, 1.0 / sqrt(2.0)) digits 6);
end func;