IMPLEMENTATION MODULE afai; CONST eps = 1.0E-8; PROCEDURE sqrt(x:REAL):REAL; VAR a,c: REAL; (* 0=(a*(1+c/2))^2=b*(1-c)*(1+c/2)^2=b*(1-0.75*(c^2)-0.25*c^3)) *) a := a*(1.0 + 0.5*c); (* a^2 = b*(1-0.75*(c^2)-0.25*(c^3)) = b*(1-(c^2)*0.75+0.25*c)*) c := c*c * (0.75 + 0.25*c); (* a^2 = b*(1-c) *) UNTIL ABS(c) < eps; RETURN a END sqrt; PROCEDURE log(x:REAL):REAL; VAR a,b,sum: REAL; (* 1<=x<2 *) BEGIN a := x; b := 1.0; sum := 0.0; REPEAT (* log(x) = s + b*log(a), b <= 1, 1 <= a < 2 *) a := a*a; b := 0.5*b; IF a >= 2.0 THEN sum := sum + b; a := 0.5*a; END UNTIL ABS(b) < eps; RETURN sum END log; PROCEDURE recip(x:REAL):REAL; VAR a,c: REAL; (* 0