03-30-2021, 04:58 PM

In light of all the recent Sharp enthusiasm, here's my attempt at a TVM solver for the PC-1211, and compatible models like the PC-1250, and no doubt many others (and their corresponding Tandy/Radio Shack versions).

The math is based largely on the 17BII manual's formulas, this TVM program for serveral different HPs, and some of the mathematical notes found here.

The PC-1211 and PC-1250 don't have hyperbolic functions for easy, accurate calculation of e^x-1 for |x| close to zero, but using the infinite series for ln(1+x) does offer some accuracy improvement.

Usage is fairly straight-forward. On the PC-1211, you'll need to switch to DEF mode. On other models like the PC-1250, there's a dedicated DEF key that you press instead of Shift. Set B=1 for begin mode, otherwise set B=0. These are the key assignments - for storing variables, first enter the value into the display, then press the appropriate key:

Shift Z: Store n

Shift X: Store i%

Shift C: Store PV

Shift V: Store PMT

Shift B: Store FV

Shift A: Compute n

Shift S: Compute i%

Shift D: Compute PV

Shift F: Compute PMT

Shift G: Compute FV

Results are generally pretty good, and don't seem to differ by more than a few thousandths of a penny in the few sample problems that I tried. I'm not sure if the Sharps use binary rather than decimal, but I did notice that solving for PMT in a problem where FV=0, then immediately solving for FV could yield small non-zero values on the order of 1E-5.

The math is based largely on the 17BII manual's formulas, this TVM program for serveral different HPs, and some of the mathematical notes found here.

The PC-1211 and PC-1250 don't have hyperbolic functions for easy, accurate calculation of e^x-1 for |x| close to zero, but using the infinite series for ln(1+x) does offer some accuracy improvement.

Usage is fairly straight-forward. On the PC-1211, you'll need to switch to DEF mode. On other models like the PC-1250, there's a dedicated DEF key that you press instead of Shift. Set B=1 for begin mode, otherwise set B=0. These are the key assignments - for storing variables, first enter the value into the display, then press the appropriate key:

Shift Z: Store n

Shift X: Store i%

Shift C: Store PV

Shift V: Store PMT

Shift B: Store FV

Shift A: Compute n

Shift S: Compute i%

Shift D: Compute PV

Shift F: Compute PMT

Shift G: Compute FV

Code:

`1 "Z":AREAD N`

2 PRINT "N=";N:END

3 "X":AREAD I

4 PRINT "I%=";I:END

5 "C":AREAD P

6 PRINT "PV=";P:END

7 "V":AREAD M

8 PRINT "PMT=";M:END

9 "B":AREAD F

10 PRINT "FV=";F:END

11 "A":GOSUB 100:N=LN ((MK/J-F)/(MK/J+P))/LN (1+J):GOTO2

21 "S":IF I=0LET I=.01

22 GOSUB 28:IF Y=0GOTO 4

23 V=I:I=I+.01:GOSUB 28

24 T=I:I=I-(I-V)Y/(Y-W):V=T:GOSUB 28

25 IF (Y<>0)*(Y<>W)GOTO 24

26 GOTO 4

28 W=Y:GOSUB 100:Y=P+KMU+FS:RETURN

31 "D":GOSUB 100:P=-KMU-FS:GOTO 6

41 "F":GOSUB 100:M=(-FS-P)/K/U:GOTO 8

51 "G":GOSUB 100:F=-(MKU+P)/S:GOTO 10

100 J=.01I:S=(1+J)^-N:U=(1-S)/J:K=1+JB:RETURN

Alternative lines for greater accuracy at the cost of speed:

100 J=.01I:IF ABS J>=1 LET L=LN (1+J):GOTO 105

101 S=J:C=2:X=-J:Z=X

102 Z=Z*X:L=S-Z/C:IF L=S GOTO 105

103 C=C+1:S=L:GOTO 102

105 S=1/EXP (NL):U=(1-S)/J:K=1+JB:RETURN

Results are generally pretty good, and don't seem to differ by more than a few thousandths of a penny in the few sample problems that I tried. I'm not sure if the Sharps use binary rather than decimal, but I did notice that solving for PMT in a problem where FV=0, then immediately solving for FV could yield small non-zero values on the order of 1E-5.