.TITLE .DPRT / / DOUBLE PRECISION SQUARE ROOT / .GLOBL DSQRT,.DSQRT .GLOBL .SQRT,.DBLE,.DPRST,.DPRLD,.DPADD,.DPRDV,.RVRSG .GLOBL .MODEA,.MODEB,.SIGNA,.EXPA,.ADDR1,.MOSTA .GLOBL .GRAB / DSQRT XX JMS* .GRAB JMS .DSQRT JMP* DSQRT / .DSQRT XX JMS* .DBLE /CHECK MODE CLA SAD* .MOSTA / IS ARGUMENT ZERO? JMP* .DSQRT / YES. EXIT LAC .ADDR1 JMS* .DPRST /STORE ARGUMENT LAC* .MODEA JMS* .SQRT /GENERATE FIRST APPROXIMATION LAC* .MODEA JMS* .DBLE /RESET MODE TO DOUBLE PRECISION LAC .ADDR1 JMS* .DPRLD /LOAD ORIGINAL ARGUMENT LAC .ADDR1 JMS* .DPRST /SAVE APPROXIMATION DZM* .MODEB / ZERO MODEB. 'REVRSG' WILL USE MODE OF MODEA JMS* .RVRSG /SWAP ACC'S JMS* .DPRDV DZM* .SIGNA /VALUE MUST BE POSITIVE LAC .ADDR1 JMS* .DPRLD /LOAD APPROXIMATION JMS* .DPADD LAW -2 ADD* .EXPA /ADD -1 DAC* .EXPA /DSQRT=0.5*(SQRT+X/SQRT) JMP* .DSQRT / .END