	.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
