%SYSTEMREALFN SQRT(%REAL ARG) %INTEGER I,J %REAL Y,OLD %REALARRAY A(0:15) ! %IF ARG<0.0 %THEN MLIBERR(50) %AND ARG=-ARG %IF ARG<0.0 %THEN PRINTSTRING("SQRT ARG NEG ") %AND %RESULT=-1 %IF ARG=0 %THEN %RESULT=0.0 %CYCLE I=0,1,15 Y=ARG/2**I %IF Y<1 %THEN ->OUT %REPEAT OUT: %IF Y>1 %THEN I=17 %AND Y=Y/4 %ELSE I=I+1 %AND Y=Y/2 %IF Y>0.34375 %THEN A(0)=Y/2 +0.4368 %ELSE A(0)=Y/2+0.381 %CYCLE J=0,1,14 OLD=A(J) A(J+1)=(OLD+Y/OLD)/2 %IF MOD(A(J+1)-OLD)<0.000000000000005 %THEN %EXIT %REPEAT %RESULT=A(J+1)*2**(I/2) %END %ENDOFFILE