.TITLE .DB COMPUTE SINE OF ARGUMENT IN FLOATING ACCUMULATOR /COPYRIGHT 1970, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. /EDIT 2 10-22-70 .GLOBL .DB,.AB,.AS,.AP,.AX,.AW,.AU,.DC / CALLING SEQUENCE (DOUBLE PRECISION) / JMS* (.DB) SUBR CALL (ARG IN FLT ACC) / NEXT INSTRUCTION SUBR RETURN (RESULT IN FLT ACC) / .DB CAL 0 /ENTRY-EXIT LAC* .AB /GET SIGN WORD (.AB) AND SINE02 DAC SINE03 /STORE ANS SIGN LAC* .AB /MAKE SIGN WORD POSITIVE AND SINE04 DAC* .AB JMS* .AS /MULTIPLY DOUBLE (.AS) .DSA SINE06 / (2/PI * ARG) JMS* .AP /STORE DOUBLE (.AP) .DSA SINE08 / (TEMP) JMS* .AX /FIX FOR INTEGER (.AX) DAC SINE10 /STORE INTEGER FOR QUADRANT DETERMINATION JMS* .AW /FLOAT INTEGER ONLY (.AW) JMS* .AU /REVERSE SUBTRACT DOUBLE (.AU) .DSA SINE08 / (TEMP(ARG*2/P)-ACC(INT ARG*2/P)FOR FRACT LAC SINE10 /GET INTEGER RCR /B17 TO LINK SNL /IF SET-COMPUTE 1-F (QUAD II OR IV) JMP SINE13 /OR TEST B16 JMS* .AU /REVERSE SUBTRACT DOUBLE .DSA SINE14 / (1-F) SINE13 LAC SINE10 /GET INTEGER AGAIN RTR /B16 TO LINK SNL /IF SET-NEGATE ANS SIGN (QUAD III OR IV) JMP SINE15 LAC SINE02 /GET SIGN BIT XOR SINE03 /XOR ANS SIGN DAC SINE03 /STORE ANS SIGN SINE15 JMS* .DC /POLYNOMIAL EVALUATE (.DC) .DSA SINE17 /FWA OF CALL SEQUENCE LAC* .AB /GET SIGN WORD OF ANSWER (.AB) AND SINE04 /STRIP SIGN XOR SINE03 /INSERT ANS SIGN SAD SINE02 /CHECK FOR -0.0 CASE CLA /YES. MAKE -0.0 A 0.0 DAC* .AB /RESTORE JMP* .DB /EXIT SINE02 400000 SINE03 CAL 0 /ANS SIGN SINE04 377777 SINE06 0 / 2/PI (1) (0.63661977236) 242763 / (2) 015566 / (3) SINE08 CAL 0 /TEMP STORAGE (1) CAL 0 / (2) CAL 0 / (3) SINE10 CAL 0 /INTEGER STORAGE SINE14 1 /FLOATING 1 (1) 200000 / (2) 0 / (3) SINE17 777772 /(N-1) (5) 777750; 351732; 333236 /0.54465285D-7 777756; 761211; 460000 /-0.3595184353D-5 777764; 250166; 553372 /0.16043839964D-3 777771; 631322; 620016 /-0.4681752998D-2 777775; 243153; 614634 /+0.796926260D-1 000000; 645273; 634612 /-0.6459640975D0 000001; 311037; 552422 /+1.57079632680D0 .END