DCL DD N PKD(31,30); DCL DD SQRT PKD(31,30); DCL DD P PKD(31, 0); DCL DD Y PKD(31,30); DCL DD A PKD(31,30); DCL DD B PKD(31,30); DCL DD C PKD(31,30); CPYNV P, 4; CPYNV N, 2; CALLI GET-SQUARE-ROOT, *, .GET-SQUARE-ROOT; SUBN Y, SQRT, 1; MULT B, SQRT, 4; SUBN A, 6, B; CPYNV M, 3; : CALLI ITERATE-PI, *, .ITERATE-PI; SUBN(SB) M, 1/HI(=-1); RTX *; DCL DD WRK PKD(31,30); DCL DD K BIN(2); DCL INSPTR .GET-SQUARE-ROOT; ENTRY GET-SQUARE-ROOT INT; CPYNV SQRT, 1; CPYNV K, 6; NEWTON-SQRT-ITERATION: DIV WRK, N, SQRT; /* NO ROUNDING */ ADDN(S) SQRT, WRK; DIV(SR) SQRT, 2; /* ROUNDING MATTERS */ SUBN(SB) K, 1/HI(NEWTON-SQRT-ITERATION); B .GET-SQUARE-ROOT; DCL DD M BIN(2); DCL DD PI ZND(31,30); DCL INSPTR .ITERATE-PI; ENTRY ITERATE-PI INT; MULT B, Y, Y; MULT(S) B, B; SUBN N, 1, B; CALLI GET-SQUARE-ROOT, *, .GET-SQUARE-ROOT; CPYNV N, SQRT; CALLI GET-SQUARE-ROOT, *, .GET-SQUARE-ROOT; CPYNV B, SQRT; SUBN Y, 1, B; ADDN C, 1, B; DIV(SR) Y, C; /* ROUNDING IS IMPORTANT */ ADDN B, 1, Y; MULT C, Y, Y; ADDN(S) C, B; MULT(S) C, Y; MULT(S) C, P; MULT(S) P, 4; MULT(S) B, B; MULT(S) B, B; MULT(S) A, B; SUBN(S) A, C; SUBN(S) A, C; DIV(R) PI, 1, A; CPYBLAP MSG-TEXT, PI, " "; CALLI SHOW-MESSAGE, *, .SHOW-MESSAGE; B .ITERATE-PI; %INCLUDE SHOWMSG