TITLE MSIN MULTIPLE PRECISION SINE AND COSINE ROUTINE SUBTTL V1 UWO 16-NOV-70 DEFINE CONST(X,Y) < MOVM AC1,X MOVEI AC0,0 LSHC AC0,11 SUBI AC0,200 ADD AC0,[200000000000] LSH AC1,-1 SKIPGE DX MOVNM AC0,AC0 MOVEM AC0,Y MOVEM AC1,Y+1 ZAP(Y,2) > DEFINE DCONST(DX,Y) < MOVM AC1,DX MOVEI AC0,0 LSHC AC0,11 SUBI AC0,200 ADD AC0,[200000000000] SKIPGE DX MOVNM AC0,AC0 MOVEM AC0,Y MOVE AC0,DX MOVE AC1,DX+1 SKIPGE AC0 DFN AC0,AC1 LSH AC1,11 LSHC AC0,10 TLZ AC0,400000 LSH AC1,-1 MOVEM AC0,Y+1 MOVEM AC1,Y+2 ZAP (Y,3) > DEFINE ZAP(A,B) < MOVE AC2,PREC MOVEI AC1,B AOS AC2 CAIG AC2,B JRST .+4 SOS AC2 SETZM A(AC2) JRST .-4 > DEFINE DPVAL(X,DY,%ODDERR,%ASS) < MOVM AC0,X SUB AC0,[200000000000] ADDI AC0,200 MOVEM AC0,EXP# TDZE AC0,[777777777400] JRST ERROR# MOVE AC1,X+1 MOVE AC2,X+2 TRNE AC2,100000 AOS AC2 JUMPL AC2,%ODDERR %ASS: LSH AC2,1 LSHC AC1,1 LSHC AC0,33 LSH AC1,-33 LSHC AC1,^D18 MOVE AC2,EXP SUBI AC2,33 LSH AC2,^D27 IOR AC1,AC2 SKIPGE X DFN AC0,AC1 MOVEM AC0,DY MOVEM AC1,DY+1 JRST .+7 %ODDERR: AOS AC1 TLZN AC2,400000 JRST %ASS LSHC AC1,-1 JRST %ASS > DEFINE SETPREC (N) < MOVEI AC0,N MOVEM AC0,PREC#> DEFINE COPY(X,Y) < IRP Y< HRLI AC2,X HRRI AC2,Y MOVE AC1,PREC ADDI AC1,Y HRRM AC1,.+1 BLT AC2,.>> DEFINE MADD(X,Y,Z) < JSA 16, MADD EXP X,Y,PREC,Z JRST OUTNOW> DEFINE MMUL(X,Y,Z) < JSA 16,MMULT EXP X,Y,PREC,Z JRST 2 > DEFINE MDIV(X,Y,Z) < JSA 16,MDIV EXP X,Y,PREC,Z JRST 3 > EXTERN MADD,MMULT,MDIV ENTRY MSIN,MCOS MCOS: Z MOVE 0,@0(16) HRRI AC1,@0(16) AOS AC1 HRRM AC1,.+1 MOVE AC1,. MOVEM AC0,DX MOVEM AC1,DX+1 DCONST(DX,X) SETPREC(2) COPY (ONES,) COPY (ZEROS,) JRST AGGY-1 MSIN: 0 MOVE 0,@0(16) HRRI AC1,@0(16) AOS AC1 HRRM AC1,.+1 MOVE AC1,. MOVEM AC0,DX MOVEM AC1,DX+1 DCONST(DX,X) S0: SETPREC(2) COPY (ONES,N) COPY (X,) MMUL(X,X,X2) AGGY: MADD (N,ONES,T1) MADD ( T1,ONES,T2) MMUL ( X2,TERM,TERM) MMUL (T1,T2,T1) MDIV(TERM, T1,TERM) COPY ( T2,N) MOVE AC5,TERM MOVNM AC5,TERM MADD (SUM,TERM,SUM) MOVM AC4,SUM MOVM AC5,TERM SUB AC4,AC5 CAIGE AC4,^D70 JRST AGGY OUTNOW: DPVAL(SUM,DANS) MOVE AC0,DANS MOVE AC1,DANS+1 JRA 16,1(16) DANS: BLOCK 2 DX: BLOCK 2 ONES: OCT 200000000001,200000000000,0,0 ZEROS: OCT 0,0,0,0 TERM: BLOCK 4 N: BLOCK 4 SUM: BLOCK 4 X2: BLOCK 4 T1: BLOCK 4 X: OCT 200000000001,200000000000,0,0 T2: BLOCK 4 AC5=5 AC6=6 AC4=4 AC0=0 AC1=1 AC2=2 AC3=3 END