	.TITLE	.DPSC
/
/  DOUBLE PRECISION SINE AND COSINE ROUTINES
/
	.GLOBL	DSIN,DCOS,.DSIN,.DCOS
	.GLOBL	.DPRML,.DPADD,.LODBD,.DPRST,.DPRLD,.DPSER
	.GLOBL	.CMPLA,.CMPLB,.FLOTB,.FIX,.DBLE
	.GLOBL	.MODEA,.SIGNA,.B3,.B4,.INT2,.ADDR2,.CNTR
	.GLOBL	.GRAB
/
DSIN	XX
	JMS*	.GRAB
	JMS	.DSIN
	JMP*	DSIN
/
DCOS	XX
	JMS*	.GRAB
	JMS	.DCOS
	JMP*	DCOS
/
/
.DSIN	XX
	JMS*	.DBLE	/CHECK MODE
	LAC	(PIBY2
	JMS*	.DPRLD	/-PI/2 TO ACC B
	JMS*	.DPADD
	LAC*	.MODEA
	JMS	.DCOS	/SIN(X)=COS(X-PI/2)
	JMP*	.DSIN
/
.DCOS	XX
	JMS*	.DBLE	/CHECK MODE
	DZM*	.SIGNA	/COS FUNCTION IS EVEN, TAKE POSITIVE VALUE
	LAC	(TOBYPI
	JMS*	.DPRLD
	JMS*	.DPRML	/DIVIDE BY PI/2
	JMS*	.FIX
	LAC*	.INT2
	RTR
	DAC	FLAG	/FLAG<0 IF QUADRANT IS 2 OR 4
	SZL!SPA		/SKIP IF AC0=L=0
	CML!CMA
	SZL!SPA!CLL!CLA	/SKIP WILL OCCUR IF AC0 WAS =L
	STL
	RAR
	DAC	SIGN	/SIGN IS MINUS IF QUADRANT IS 2 OR 3
	JMS*	.FLOTB
	DZM*	.B3
	DZM*	.B4	/ZERO EXTENSION
	JMS*	.CMPLB
	JMS*	.DPADD	/CALCULATE T
	LAC	FLAG
	SMA!CLA
	JMP	SERIES
	LAC	(C0	/T=1.-T IF QUADRANT IS 2 OR 4
	JMS*	.DPRLD
	JMS*	.CMPLA
	JMS*	.DPADD
SERIES	JMS*	.LODBD	/ACC A TO ACC B
	JMS*	.DPRML	/CALCULATE T**2
	LAC	.ADDR2
	JMS*	.DPRST	/STORE IT IN ADDR2
	LAW	-14
	DAC*	.CNTR
	LAC	(C12	/SERIES SET UP
	JMS*	.DPSER
	LAC	SIGN
	DAC*	.SIGNA	/SET SIGN
	JMP*	.DCOS
/
PIBY2	1; 444177; 325042; 055060; 432305
TOBYPI	0; 213714; 033344; 710405; 224774
C12	777700; 407066; 075031; 027777; 656535
	777710; 245271; 404407; 736115; 211076
	777717; 736670; 302153; 321607; 072010
	777727; 124061; 544327; 603050; 441253
	777736; 101430; 260571; 327751; 245602
	777744; 555611; 475045; 422436; 266734
	777752; 763516; 050673; 074605; 067270
	777760; 515507; 712420; 112427; 246465
	777765; 703724; 032110; 672565; 721444
	777772; 253517; 437436; 277763; 761245
	777776; 007406; 702015; 532607; 315230
	1; 167517; 462337; 105674; 551126
C0	1; 0; 0; 0; 0
FLAG;SIGN
/
	.END
