/ SIN -- COS -- TAN / WRITTEN BY / PHILLIP SIEMENS / LAWRENCE LIVERMORE LAB / AUGUST 28, 1975 / FOR 23 BIT F. P. FORMAT ENTRY SIN ENTRY COS ENTRY TAN OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF JMPI 5400 LAP X, BLOCK 1 /OVERLAP WITH COS ENTRY COS, 6140 /VERSION # 0005 /EDIT # TAD COS /SET UP SIN ENTRY FOR DCA SIN /ARG FETCHING AND TAD COS# /THE RETURN DCA SIN# IAC /ENTER SIN WITH OFFSET JMP COSE MFAC, 0 /MOVE ARG TO FAC TAD SIN DCA SIN1 SIN1, HLT TADI SIN# /GET DF OF ARG DCA SIN2 INC SIN# /BUMP POINTER CLA CMA TADI SIN# /GET ADDRESS OF ARG DCA 10 INC SIN# /BUMP POINTER CLA CMA CLL RTL /-3 DCA CNT TAD (17 DCA 11 SIN2, HLT /SET DF TO ARG TADI 10 /GET ARG 6211 /SET DF TO FAC DCAI 11 /STORE IN FAC ISZ CNT JMP SIN2 JMPI MFAC SIN, 6140 /VERSION # 0005 /EDIT # COSE, DCA QUADRT /INITIALIZE QUADRANT IAC DCA PIEX /SET UP PI/2 JMS NORM /GET INTO RANGE POLYEV, TAD (-6 JMS POL /6 TERM POLYNOMIAL COF /ADDRESS OF TERMS EX, CLA CLL CML RTL /FAST EXIT TAD SIN EX3, DCA EX2 QUADRT, EX2, HLT JMPI SIN# CNT, STOX, 0 /STORE FAC INTO X TAD ACH DCA X TAD ACM DCA COS TAD ACL DCA COS# JMPI STOX NORM, 0 /NORMALIZE INTO RANGE JMS MFAC /GET ARG IN FAC JMS STOX /SAVE FAC IN X CALL 1, FDV /DIVIDE BY PI/2 ARG PIOVR2 CALL 0, FIX SNA /IF ZERO, SAVE STEPS JMP SIN5 DCA CNT /SAVE IT TAD CNT CALL 0, FLOT /FLOAT IT CALL 1, FMP /MULTIPLY BY ARG PIOVR2 /PI/2 CALL 0, CHS CALL 1, FAD /SUBTRACT FROM X ARG X TAD QUADRT TAD CNT DCA QUADRT SIN3, TAD X /GET SIGN SMA CLA /MINUS? JMP SIN4 /NO CLA CMA TAD QUADRT DCA QUADRT CALL 1, FAD ARG PIOVR2 SIN4, TAD QUADRT /FIND OUT WHAT QUAD. RTR SMA CLA JMPI NORM CALL 0, CHS /IF QUADRT = 2 OR 4 CALL 1, FAD /MAKE FAC = PI/2 - FAC ARG PIOVR2 JMPI NORM SIN5, TAD X /MOVE X TO FAC DCA ACH TAD COS DCA ACM TAD COS# DCA ACL JMP SIN3 PIOVR2, 3110 /USED AS PI/2 AND PI/4 3755 PIEX, TAN, 6140 /VERSION # 0005 /EDIT # TAD TAN /MOVE ENTRY DCA SIN TAD TAN# DCA SIN# DCA PIEX /SET UP PI/4 JMP TEVAL /EVALUATE THE TAN SERIES PAGE POL, 0 /EVALUATE POLY. DCA CNT2 /# OF TERMS JMS STOX /STORE FAC IN X CALL 1, FMP /SQUARE FAC ARG ACH TAD ACH /PUT FAC IN XSQR DCA XSQR /AND CLEAR FAC DCA ACH TAD ACM DCA XSQR# TAD ACL DCA XSQR1 JMS 45 /SET DF = CURRENT CNT2, 0 TADI POL ISZ POL ARG2, DCA ARG1# /SET POINTER TO COEF. CALL 1, FAD ARG1, ARG COF ISZ CNT2 /MORE TERMS JMP POL1 /YES CALL 1, FMP ARG X TAD QUADRT /FIND OUT QUAD. RTR SNL CLA JMPI POL CALL 0, CHS /NEGATE IF Q3, Q4 JMPI POL XSQR, 0 0 XSQR1, 0 POL1, CALL 1, FMP ARG XSQR TAD (3 TAD ARG1# /UPDATE COEF. POINTER JMP ARG2 COF, 4625 /-0.0000000239 4654 7747 2705 / 0.0000027526 6250 7756 4577 /-0.000198409 4777 7764 2104 / 0.0083333315 2103 7772 5252 /-0.1666667 5253 7776 2000 / 1.0 0000 0001 TOEF, 2337 / 0.0095168091 3062 7772 2760 / 0.0029005250 5536 7770 3111 / 0.024565090 7135 7773 3324 / 0.053374060 7541 7774 2104 / 0.13339240 6002 7776 2525 / 0.33333140 2465 7777 2000 / 1.00000000 0000 0001 TEVAL, DCA QUADRT JMS NORM CLL TAD ACL /GET EXPONENT SMA /IF POSITIVE, GO EVALUATE JMP TEVAL0 /THE SERIES TAD (10 /SKIP SERIES IF SNL CLA /EXPONENT IS LESS THAN -7 JMP TEVAL1 TEVAL0, CLA TAD (-7 JMS POL /7 TERM SERIES TOEF TEVAL1, CLA CMA TAD QUADRT RTR SZL CLA JMP EX JMS STOX /PUT FAC IN X CLA CLL CML RTR /LOAD FAC WITH 1 DCAI (20 IAC DCAI (22 DCAI (21 CALL 1, FDV ARG X JMP EX END