1  REM ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM       EXTEND:  TOTAL ACCURACY MATH UTILITY PROGRAM
4  REM
5  REM       36253  REV A  --  2/73
6  REM
7  REM ****  CONTRIBUTED PROGRAM  *************************************
8  REM
10  REM  *** AARDWOLF & COMPANY WRITING TEAM ***  JOHN C. RIDGES
20  REM  *** EXTEND *** 1142 WORDS *** VERSION 1 ***
30  DIM A[4000],B[73],C[73],A$[10],B$[72],C$[72]
40  A$="0123456789"
50  I0=10
60  I=I0/I0
70  PRINT "THE FOLLOWING INSTRUCTIONS CAN BE USED:"'13'10"FACTORIAL"'13'10"DIVIDE"'13'10"FACTOR"'13'10"EXPONENTIATE"'13'10"STOP";
80  PRINT '13'10'10"WHAT IS YOUR INSTRUCTION";
90  INPUT B$
100  RESTORE 
110  FOR A=I TO 5
120  READ C$
130  IF C$=B$[I,LEN(C$)] THEN 180
140  NEXT A
150  PRINT "ILLEGAL INSTRUCTION.";
160  GOTO 80
170  DATA "FACTORI","D","FACTOR","E","S"
180  GOSUB A OF 200,470,650,1030,1270
190  GOTO 80
200  MAT A=ZER
210  A[I]=L=I
220  I0=10
230  PRINT "INPUT FROM, TO AND STEP";
240  INPUT F,T,S
250  FOR A=I TO T
260  MAT A=(A)*A
270  FOR C=I TO L+I+I
280  A[C+I]=A[C+I]+INT(A[C]/1000)
290  A[C]=A[C]-INT(A[C]/1000)*1000
300  NEXT C
310  FOR B=L+3 TO L STEP -I
320  IF A[B] THEN 340
330  NEXT B
340  L=B
350  IF A<F OR A/S#INT(A/S) THEN 450
360  PRINT '13'10'10A"FACTORIAL = ";
370  FOR P=L TO I STEP -I
380  FOR Q=I+I TO I-I STEP -I
390  M=INT(A[P]/I0^Q)-INT(A[P]/I0^(Q+I))*I0+I
400  PRINT A$[M+(P=L AND A[P]<I0^Q),M];
410  NEXT Q
420  IF P=I THEN 440
430  PRINT ",";
440  NEXT P
450  NEXT A
460  RETURN 
470  PRINT '13'10'10"INPUT A/B";
480  INPUT A,B
490  Q=B
500  FOR P=I-I TO 38
510  IF B*I0^P>A THEN 530
520  NEXT P
530  B=B*I0^(P-(A >= B))
540  P=P+(A<B)
550  PRINT "HOW MANY DIGIT ACCURACY (MIN. OF"P MAX I")";
560  INPUT D
570  PRINT '10A"/"Q"= ";
580  FOR Z=I TO D
590  IF Z-I#P THEN 610
600  PRINT ".";
610  PRINT A$[INT(A/B)+I,INT(A/B)+I];
620  A=(A-INT(A/B)*B)*I0
630  NEXT Z
640  RETURN 
650  MAT C=ZER
660  H=I
670  I2=C=I+I
680  PRINT '13'10'10"INPUT NUMBER TO BE FACTORED";
690  INPUT B$
700  L=LEN(B$)
710  FOR A=L TO I STEP -I
720  FOR B=I TO I0
730  IF B$[A,A]#A$[B,B] THEN 760
740  C[H]=B-I
750  H=H+I
760  NEXT B
770  NEXT A
780  D=SQR(C[L]+I)*I0^((L-I)/I2)
790  IF D <= C THEN 940
800  MAT B=C
810  FOR C=C TO D
820  IF (C/I2=INT(C/I2) OR C/3=INT(C/3) OR C/5=INT(C/5)) AND C>5 THEN 960
830  FOR E=L TO I2 STEP -I
840  F=INT(C[E]/C)
850  C[E-I]=C[E-I]+I0*(C[E]-C*F)
860  C[E]=F
870  NEXT E
880  IF C[I]/C#INT(C[I]/C) THEN 950
890  PRINT C"*";
900  C[I]=C[I]/C
910  FOR L=L TO I2 STEP -I
920  IF C[L] THEN 940
930  NEXT L
940  GOTO I+(C >= D) OF 780,980
950  MAT C=B
960  NEXT C
970  GOTO 910
980  PRINT " ";
990  FOR G=L TO I STEP -I
1000  PRINT A$[C[G]+I,C[G]+I];
1010  NEXT G
1020  RETURN 
1030  MAT A=ZER
1040  L=J1=4000
1050  A[J1]=I
1060  PRINT '13'10'10"INPUT THE BASE & EXPONENT";
1070  INPUT W,Q
1080  Y=INT(LOG(W)/LOG(I0))+I
1090  FOR A=I TO Q
1100  MAT A=(W)*A
1110  FOR C=J1 TO L-Y STEP -I
1120  A[C-I]=A[C-I]+INT(A[C]/I0)
1130  A[C]=A[C]-INT(A[C]/I0)*I0
1140  NEXT C
1150  FOR B=L-Y-I TO L
1160  IF A[B] THEN 1180
1170  NEXT B
1180  L=B
1190  NEXT A
1200  PRINT W"^"Q"= ";
1210  FOR P=L TO J1
1220  PRINT A$[A[P]+I,A[P]+I];
1230  IF (P-J1)/3#INT((P-J1)/3) OR P=J1 THEN 1250
1240  PRINT ",";
1250  NEXT P
1260  RETURN 
1270  END 
