30 lines
644 B
Text
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;
|