MATHEMATICAL EXPLORATIONS

A Simple Implementation of Extended Precision Integer Arithmetic using the TI-85 Graphing Calculator

Source Code

ADD: Addition

\START85\
\COMMENT=Program file dated 11/07/96, 21:23
\NAME=ADD
\FILE=C:\LINK\ADD.85P
: ClLCD
:0\->\C
:Disp "ADDITION"
:Disp ""
:InpST ST
:ST2L
:NL\->\AB
:InpST ST
:ST2L
:NL\->\AC
:(dimL AB)*(dimL AB>dimL AC or dimL AB==dimL AC)+(dimL AC)*(dimL AC>dim\#\
L AB)+1\->\dimL C
:If dimL AB>dimL AC
:Then
:AC\->\LL
:AB\->\AC
:LL\->\AB
:""\->\LL
:End
:If dimL AB==dimL AC
:Then
:For(P,2,dimL C)
:AB(P-1)+AC(P-1)\->\C(P)
:End
:Else
:For(P,2,dimL C)
:AC(P-1)\->\C(P)
:End
:For(P,dimL C-dimL AB+1,dimL C,1)
:C(P)+AB(P-dimL C+dimL AB)\->\C(P)
:End
:End
:FIXL
:L2SD
\STOP85\

FCTRL: Factorials

\START85\
\COMMENT=Program file dated 11/07/96, 21:23
\NAME=FACT
\FILE=C:\LINK\FACT.85P
:0\->\C
:ClLCD
:Disp "N FACTORIAL"
:Disp ""
:Input N
:iPart (log (N!))+1\->\dimL C
:N\->\C(dimL C)
:For(K,N-1,2,\(-)\1)
:C*K\->\C
:If max(C)*K>2\E\13
:Then
:FIXL
:End
:End
:FIXL
:L2SD
\STOP85\

MULT: Multiplication

\START85\
\COMMENT=Program file dated 11/07/96, 21:23
\NAME=MULT
\FILE=C:\LINK\MULT.85P
:0\->\C
:ClLCD
:Disp "Long Integer"
:Disp "Multiplication"
:Disp ""
:InpST ST
:ST2L
:NL\->\A
:InpST ST
:ST2L
:NL\->\B
:dimL A+dimL B\->\dimL C
:For(L,1,dimL A)
:For(M,1,dimL B)
:C(dimL C-(dimL A-L+dimL B-M))+A(L)*B(M)\->\C(dimL C-(dimL A-L+dimL B-M\#\
))
:End
:End
:FIXL
:L2SD
\STOP85\

PWR: Integer powers

\START85\
\COMMENT=Program file dated 11/07/96, 21:23
\NAME=PWR
\FILE=C:\LINK\PWR.85P
:ClLCD
:0\->\C
:Disp "EXPONENTS"
:Disp ""
:Input A
:Input B
:iPart (B*log A)+1\->\dimL C
:A\->\C(dimL C)
:For(M,1,B-1,1)
:If max(C)*A>2\E\13
:Then
:FIXL
:End
:C*A\->\C
:End
:FIXL
:L2SD
\STOP85\

L2SD: List to String and Display; subroutine (improved algorithm due to Mark Lybrand)

\START85\
\COMMENT=Program file dated 11/19/96, 21:39
\NAME=L2SD
\FILE=C:\85\L2SD.85P
:"0123456789"\->\DIGITS
:" "\->\ST2
:1\->\B
:While C(B)==0
:1+B\->\B
:End
:For(I,B,dimL C,1)
:sub(DIGITS,C(I)+1,1)\->\TEMP
:ST2+TEMP\->\ST2
:End
:sub(ST2,2,lngth ST2-1)
\STOP85\

FIXL ('Fix List' -- subroutine to carry)

\START85\
\COMMENT=Program file dated 11/07/96, 21:23
\NAME=FIXL
\FILE=C:\LINK\FIXL.85P
: For(I,dimL C,2,\(-)\1)
:(C(I)-mod(C(I),10))/10+C(I-1)\->\C(I-1)
:mod(C(I),10)\->\C(I)
:End
\STOP85\

ST2L (String -> List)

\START85\
\COMMENT=Program file dated 11/07/96, 21:23
\NAME=ST2L
\FILE=C:\LINK\ST2L.85P
: lngth ST\->\dimL NL
:For(I,1,lngth ST,1)
:sub(ST,I,1)\->\P
:\St>Eq\(P,G)
:G\->\NL(I)
:End
\STOP85\

[Wilbur validated]These pages are written, maintained and validated by Paul Pollack