HP-12C Will Never Die
Overview
The HP-12C is the only HP RPN calculator which is still produced and sold, despite is was designed in 1980. The calculator is produced by a subsidary licensed by HP, and you can find it around 40$ in US and at around 70€ in Europe. There was designed more than 14 diferent revisions by HP.
The HP-12C has less memory than tiny pocket calculators sold for a fraction of its price...how this is possible?
Obiovus errors even on such unrealistic problems can undermine user confidence. The only way to prevent apprehension is to preclude all anomalities. For this reason, we set out to produce such robust alghorithms that the user need never be concerned with questions of accuracy or operating limits.From the Roy Marting article of 1977 (below detials).
This calculator is accepted in some official examinations, and there is for sure some fashion on this phenomenon. But let's explore the HP-12C step by step.
The HP-12C provide built-in functions to compute interests, solve problem like amortizing the interest over the life of a loan. It has no alphanumeric display, and the current versions run on top of an emualtor which still use the 1981 original firmware, with some precision increase only.
HP-12C is also programmable, but has no solver (like the HP-15C) and some buttons performs more than one operation.
HP-12C became the de facto standard among financial professionals.
I like the ideas around the HP-12C:
- a tool which solve real-world problem
- careful crafted mathematical formula
- ergonomic and user interface
- precision is a first-priority for this business calculator
The formula
The algorithm to compute the composite interest was designed by Roy Martin and William Kahan and described on an article of the HP Journal of 1977 about the "brand new" HP-92.
The formula of the compound interest in the HP-12C / HP-92 can be solved for any of its variable. the previous series of caluclator like HP-80 emploied three different forumulas for computing Compound Amount, Loan and Sinking Fund.
The general formula is
$$ PV(1+i)^n + PMT\frac{[(1+i)^n-1]}{i}+FV = 0 $$
where
- i is the interest rate between 0 and 1
- n is the number of compounding periods
- PV means the Present value of cash
- PMT recurring payment value
- PV Future Value at the end of the payments. Negative means something outside your pocket.
So the specification was "simple": the HP-12C should employ a specialized "solver" to find one of the variable above, given the value of the others.
Normally you will use a Newton method, based on the first derivate to find a first approximation of the solution, to move towards it. The initial extimation for the Newton method must be chosed wisley, to avoid going in the opposite direction in respect of where the solution is headed (!)
Also, when you need to solve for the interest (i) it is very easy to have trouble; for instance the term
$$ \frac{(1+i)^n-1}{i} $$
can have a error known as catastrophic cancellation on the numerator. The Catastrophic cancellation happens when you subtract two number with a lot of significant digits in common, which leads to lost of precision. The problem is well known and the reason is simple: real numbers are always approximated inside a computer.
Wrapping up the success
So HP engineers solved all these challenges, and provided to the customers a true realiable calculator. This successful software is still the same, after 45 years!
Below a list of all the models, including clones (taken from this forum entry)
Models from HP
-------------------------------------------------------------------------------------------------------------------------------------------------------- # Model P/N Years Features CPU Clock Execution F/W IO-plug Power-Supply Speed -------------------------------------------------------------------------------------------------------------------------------------------------------- 1 12C F1637A? 81-88? RPN, 20R, 100S 1LF5 (HP NUT) 884KHz Native ROM 4.5V (3xLR44) x1 2 12C F1637A? 81?-88? RPN, 20R, 100S 1LM2 (HP NUT) 884KHz Native ROM 4.5V (3xLR44) x1 3 12C F1637A? 88-01? RPN, 20R, 100S 1LQ9 (HP NUT) 884KHz Native ROM 4.5V (3xLR44) x1 4 12C F1637A? 95-01? RPN, 20R, 100S 1RR2 (HP NUT) 884KHz Native ROM 4.5V (3xLR44) x1 5 12C ? 99?-07 RPN, 20R, 100S Agilent 2AF1-0001 (HP NUT) 884KHz Native ROM 3V (1xCR2032) x1 6 12C ? 01?-07 RPN, 20R, 100S Marvell 2AF1-0002 (HP NUT) 884KHz Native ROM 3V (1xCR2032) x1 7 12C Platinum F2231A 03-05? RPN,ALG,30R,400S,+digits Sunplus SPLB20D2 (6502) ~1MHz Native,upd.specs ROM 3V (1xCR2032) x1.5? 8 12C Plat.(v2) F2232A 05?-10? RPN,ALG,(),BS,80R,400S Generalplus GPLB31A (6502) ~4MHz Native,upd.specs ROM 3V (1xCR2032) x6? 9 12C Prestige F2233A 06-? RPN,ALG,(),BS,80R,400S Generalplus GPLB31A (6502) ~4MHz Native,upd.specs ROM 3V (1xCR2032) x6? 10 12C Plat.25th AE F2231AA 06-08? RPN,ALG,(),BS,80R,400S Generalplus GPLB31A (6502) ~4MHz Native,upd.specs ROM 3V (1xCR2032) x6? 11 12C (+, v1) F2230A 08-? RPN, 20R, 100S Atmel AT91SAM7L128 (ARM7DTMI) ~36MHz Emulated HP NUT FLASH 6p(ser) 3V (2xCR2032) x60 12 12C Plat.(v3) F2232A 10-? RPN,ALG,(),BS,80R,400S Generalplus GPLB31A (6502) ~4MHz Native,upd.specs ROM 3V (2xCR2032) x6? 13 12C 30th AE LE NW258AA 2011 RPN, 20R, 100S Atmel AT91SAM7L128 (ARM7DTMI) ~36MHz Emulated HP NUT FLASH 6p(ser) 3V (2xCR2032) x60 14 12C (+, v2) F2230A? 2015- RPN, 20R, 100S Atmel ATSAM4LC2C (Cortex-M4) ~48MHz Emulated HP NUT FLASH 6p(usb) 3V (2xCR2032) x60? --------------------------------------------------------------------------------------------------------------------------------------------------------
3rd party (Clones):
-------------------------------------------------------------------------------------------------------------------------------------------------------- # Model P/N Years Features CPU Clock Execution F/W IO-plug Power-Supply Speed -------------------------------------------------------------------------------------------------------------------------------------------------------- 15 Aurora FN1000 2003 Clamshell based on 12C Native,custom Specs 16 Truly SC123 2005 Vertical based on 12CP Native,custom Specs 17 Victor V12 ? Based on 12C Plat.25thAE Native,custom Specs 18 BrtC FC-12 ? Based on 12CP 25thAE Native,custom Specs 19 Compucessory CCS28956 2010 Clamshell based on 12CP Native,custom Specs 20 SwissMicros DM-12CC 2012 Based on 12C, USB NXP LPC1114 (ARM Cortex-M0) ~48MHz Emulated HP NUT FLASH USB 3V (1xCR2032) x30 21 SwissMicros DM-12 2013? Based on 12C, USB NXP LPC1115 (ARM Cortex-M0) ~48MHz Emulated HP NUT FLASH USB 3V (1xCR2032) x30 22 SwissMicros DM-12 SE 2014? Based on 12C, USB NXP LPC1115 (ARM Cortex-M0) ~48MHz Emulated HP NUT FLASH USB 3V (1xCR2032) x30 -------------------------------------------------------------------------------------------------------------------------------------------------------
SwissMicros clone are very well done, but a lot overpriced in our humble opinion.
You can find a windows emulator based on recent version (2012) here https://www.educalc.net/page/2338917/. This version can be run on macOS+whisky without problems. It also include the manual and a solution handbook and has a multi-language installation.
A older one (2008) with sources could be found here https://www.hpcalc.org/details/9554 (related discussion: https://www.hpmuseum.org/forum/post-187566.html).
Sadly, I have an hard time getting the original 1981 firmware for the "HP Nut" processor, if someone can provide it to me... As far as I can understand the software was relased in the public domain by HP. It could be interesting to design an emulator based on the original firmware.