Enter RPN

PCalc vs HP
Login

PCalc vs HP

Motivation

It all began with my project to develop an HP-32S Layout for PCalc.

At first, it was a purely surface-level clone of the primary functions, but as I delved deeper into secondary functions and submenus, I found myself needing to compare the two designs on a detailed level. My notes on these differences grew to the point that they spawned this article.

I’ve chosen to use a late 1980s hardware design as my primary point of comparison because it strikes a pleasing balance point in HP’s design evolution. Functionally, the 32S combines a large proportion of the capabilities of the three primary models in the more primitive Voyager series, yet it’s not so complex that it makes my 32S-in-PCalc project hopeless. I take the brevity of the list of HP-32SII features in my layout as a sign that I have not overreached; nearly everything HP added to the 32SII over the 32S exceeds the scope of PCalc’s capabilities, which tells me I have reached the natural limit point.

I do not expect that publishing this comparison will change the future course of PCalc even though I have reason to believe the author has seen it. The program already offers plenty of value for the modest licensing cost, and so I find myself unable to demand more. One may then ask why I bothered to make this comparison at all. Initially, it was to explain assorted infidelities in my layout project as a matter of documentation on what a user can expect from it. Later, I developed an academic interest in comparative tech archaeology, of inherent interest to a certain class of mind. 🤓

Improvements

PCalc improves on HP’s obsolete hardware design in several areas:

Missing Features

Alas, it doesn’t go all PCalc’s way. There are quite a lot of missing features relative to ye olde HP-32S:

Programmability

Primitive as the 32S programming features were compared to what you could do on a general-purpose computer of the same era — much less a modern machine — PCalc is not Turing-complete, whereas a 32S is.

That said, there is a surprisingly short list of things that PCalc would need to add to lift this limitation:

I’m uncertain whether indirect memory addressing is strictly necessary to achieve Turing completeness,5 but adding it would close the final gap with the HP-32S on this front.

The most direct current equivalent of HP’s concept of “keyboard entry programming” in PCalc is its “tape” feature. What differs is that the PCalc tape is a passive record of past work, rather than a medium for intentional creative acts. While I can imagine a future PCalc that follows HP’s path on this by extending its tape feature, the PCalc-native alternative would be to extend the existing User Functions feature instead.

Complex Numbers

Whereas a 32S implements complex numbers throughout the system, in PCalc they’re an afterthought. The HP-32S Owner’s Manual devotes the seven pages of Chapter 9 to complex numbers, plus scattered references elsewhere in the book, but the PCalc manual devotes a single sentence to the topic, dominated by a link to the Wikipedia article on complex numbers “…for people who need to work with this kind of math.”

Sigh.

Statistics

PCalc lacks all items in the HP-32S Owner’s Manual Function Index containing Σ and σ symbols. It has a few scalar primitives in this vein, but without foundational building blocks like data lists, it cannot even offer basics like summation.

Variables

The 32S allows single-letter named variables with STO/RCL, but the PCalc implementation of multiple memories is less capable even than HP’s older Voyager series, with but ten “named” memories called M0-M9.

The 32S avoided the need to add 26 alphabet keys by overloading the meaning of other keys, whereas PCalc uses the number keys directly. When you say STO1 in PCalc, it stores x in M1, but on a 32S, it would put it in location “W,” the letter assigned to the 1 key in that context. A more PCalc-native solution would be to use the OS keyboard, allowing you to say things like STOa to copy x into the “a” memory, which would be transparent on the macOS version, though awkward on the iOS version.

There is a 27th variable in the HP-32S called i, whose special power is lost in this context due to lack of an indirect memory reference feature in PCalc. Yet, we cannot ignore this HP feature because the i register is overloaded onto the . key in a 32S so that STO. stores x in register i, whereas the same sequence in PCalc will overwrite all memories with the x value! If I knew how the user could change this stock behavior of PCalc, I would have recommended it in the installation guide for my 32S Lite layout.

Equations

The HP-32S lets you enter an equation or expression complete with variables, then solve it for unknowns, find roots, and perform numeric integration over an interval. The HP-32SII expanded this with algebraic input, including (shudder) parentheses. Nothing of the kind exists in PCalc.

Storage Arithmetic

The closest PCalc has to this HP feature works in the opposite direction and is limited to a single memory location, “M0.”

On a 32S, you can say STO+A to add the contents of the x register to variable ”A,” but when you press STO in PCalc, the operator keys all gray out, giving the false impression that it has nothing like storage arithmetic. What it does provide is on the Functions → Memory menu in the macOS version. Take the Add Memory function, which adds the contents of the zeroth memory to the x register, a function commonly labeled M+ on other calculators.

PCalc has the other three basic operations plus a power-raising one, which we might label M-, , , and .

Matrices

These are entirely missing in PCalc.

Dates and Times

HP has long had direct support for dates and times, going back to at least the venerable HP-12C. While the HP-32S doesn’t go to the extent of having features like ∆DYS for calculating a span of days between two given dates, it does let you convert traditional time format (12:34:56) to decimal hours for making calculations, then back to the human-readable form. The closest I can see to this in PCalc is its extensive conversions, but these all work in decimal form; it can tell me that 0.333 years is 2917.08 hours, but what is missing from the perspective of this comparison is that it may be more naturally expressed as 2917 hours, 4 minutes, and 48 seconds. My DM32 can tell me that, albeit in a clumsy decimal-like form. (H.MMSSsss)

This same basic feature can also be used to manipulate fractional degrees, as we learned to do in elementary school, on a globe. Apple Maps tells me that HP’s old Corvallis technical design center where they developed all those wonderful calculators is at coordinates (44.581035, -123.243749). Useful as this form is for computers, is it not more pleasant to render that as 44°34'51.726" N, 123°14'37.4954" W? The calculator can make the conversion for us, both directions.

Should PCalc gain features along this line, we can expect it to put the punctuation in.

Built-in Function List Comparison

Another way of approaching these same conclusions is to compare the lists of functions each calculator boasts, emblazoned once upon a time on flashy retail boxes to justify price differences. Because the union set of all functions in this comparison comes to ~220, I choose to take an aggregate approach here rather than make you wade through a long data table. I did that work so you don’t have to; you’re welcome!

These results are therefore not detailed, but they are a useful distillation of the facts.

HP vs PCalc, Fight!

I found it easiest to start with the Function Index in Appendix D of the DM32 User’s Manual, where they have already totaled up the count for us: 171 distinct functions. This list ranges from trivial features like + to deeply subtle and complicated ones like and SOLVE.

The 32SII lacks but one of these. While SwissMicros made many enhancements in the DM32 relative to its predecessor, the sole proprietary new function they added is related to their multiple state management feature set: XEQState:label.

The 32S repertoire is another story. I took the “Function Index” starting in its Owner’s Manual on p.286, then cross-referenced it against the DM32 list and counted 35 missing features, whose nature you may guess by reading the high-level comparative reviews you may find elsewhere online:

Doing the same job with PCalc was more work because its manual lacks the single consolidated list of its every function, as HP and SwissMicros provide in their manuals. I ended up doing it the other way around, starting from the DM32 function list and treating it as an index of possibilities. For each one, I went on a hunting expedition, hoping to locate a correspondence in PCalc proper or its manual.

The number I eventually came up with is 98 functions in common with the DM32 without resorting to user functions.6 That leaves 73 missing, mainly in the areas already covered in prior sections.

One standout curiosity I came across is that the DM32 manual lists the parenthesis keys as “functions,” but while PCalc does have them for algebraic entry, I counted them as lacking here because in this context, it refers to argument grouping in the equation editor, a facility PCalc lacks.

PCalc vs HP, Finishing Move!

I then went the other way, skimming through all those PCalc menus looking for functions that I didn’t account for in the first pass above, implicitly meaning they aren’t present in any member of the “32” line. Most fall into one of the categories listed at the top of this article, but there are notable exceptions:

In all, I count some four dozen functions in PCalc with no equivalence in the “32” series calculators short of writing your own programs. The links take you to HP-32S or 32SII implementations for a few of these, but you will have to seek the rest out on your own.

By way of contrast, PCalc’s “cube” function is a single-case instance of the more general function in the 32S. While there is no direct equivalence in the 32S to the PCalc “cube root” function, the 32SII added the x'th root of y feature, which lets us get the same answer. If you had to extract a cube root on a 32S, you could put that value in, then say 1 ENTER 3 ÷ . That is, raise y to the ⅓ power, which is the same thing. If that’s too many keystrokes, put that operation sequence into a program C and call it with two keypresses instead: XEQ C.

There is one other item we can put in PCalc’s column: the algebraic entry option. None of the “32” series has it, so we have to at least mention this heresy, even if this is an RPN site. 😛

License

This work is © 2025 by Warren Young and is licensed under CC BY-NC-SA 4.0


  1. ^ As far as I have been able to find, even the DM32 has but two built-in nontrivial constants: π and e, and the latter is hidden away in the internals.
  2. ^ I count a mere six conversions in the HP-32S, twelve in the 32SII/DM32, and approximately one bazillon in PCalc, round numbers. 😜
  3. ^ There is 4-level stack limit option that allows it to better mimic the behavior of classic designs like the HP-32S, without which functions like “roll” don’t work as expected.
  4. ^ The HP Voyager series got by with just two — x>0 and x≤y — while the 32S expanded that to a comfortable eight, and the 32SII gave us a positively sybaritic twelve options!
  5. ^ Alan Turing’s original theory posits a mathematical abstraction of a paper tape running back and forth under the read/write mechanism, which is a fair model for HP’s indirect memory access via the (i) function. The primary way it falls short of the theoretical ideal is that it is far from the infinite tape Turing imagined. Since we know this limitation does not prevent the calculator from being useful, I have to ask whether restricting the solution to directly-accessed registers suffices, in which case PCalc has that covered already, today.
  6. ^ If we allowed that, we’d have to allow user programs on the HP side, too, which would give the whole game away thanks to the good doctors Church & Turing. PCalc’s finite function list would end up being divided by infinity on the HP side owing to its programmability. While that is a true interpretation, it isn’t particularly useful in this context, where the comparison is being made to the platform that lacks programmability.
  7. ^ The closest I can come to cloning that on a 32S is CLEARx+: everything moves down one, and the T register is duplicated down into Z, provided you have PCalc’s four-register stack limit enabled. This operation may be viewed as the inverse of pressing Enter while the calculator is in stack-lift mode.
  8. ^ The distinction between these gets technical.
  9. ^ HP’s PARTS{IP} is not quite the same thing if negative values are a possibility.