!SQUARE ROOT ROUTINE !KEN LOOSEMORE 17TH MARCH 1977 %CONTROL K'001001' %EXTERNALROUTINE SQRT(%INTEGERNAME N1,N2) %INTEGER R2,INC,S1,S2 %ROUTINE SQUARE(%INTEGERNAME S1,S2,%INTEGER R2) %INTEGER A,B,X,Y,Z,D A=R2//100 B=R2-100*A X=A*A Y=A*B*2 Z=B*B D=Y//100 X=X+D Z=Z+(Y-100*D)*100 D=Z//1000 %IF X> 3276 %OR(X=3276 %AND D>7) %START S1=32767 S2=32767 %FINISH %ELSE %START S1=X*10+D S2=Z-1000*D %FINISH %END INC=X'2000' R2=0 %WHILE INC>0 %CYCLE R2=R2+INC SQUARE(S1,S2,R2) %IF S1<=N1 %START %IF S1=N1 %AND S2>N2 %THEN R2=R2-INC %FINISH %ELSE R2=R2-INC INC=INC//2 %REPEAT N1=R2//1000 N2=R2-1000*N1 %END %ENDOFFILE