function m = AGM(a,b) rnd = getround; if isa(a,'double'), a = intval(a); end if isa(b,'double'), b = intval(b); end minf = inf(EnclosingAGM(a.inf,b.inf)); msup = sup(EnclosingAGM(a.sup,b.sup)); m = infsup(minf,msup); setround(rnd); return % ------------------------------------- function m = EnclosingAGM(a,b) a1 = -inf; b1 = inf; while (a > a1) | (b < b1) a1 = a; b1 = b; setround(-1); a = sqrt(a1*b1); setround( 1); b = (a1+b1)/2; end m = infsup(a,b); return