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