From mboxrd@z Thu Jan 1 00:00:00 1970 From: dave at horsfall.org (Dave Horsfall) Date: Sat, 21 Mar 2020 14:53:02 +1100 (EST) Subject: [COFF] [TUHS] The most surprising Unix programs In-Reply-To: References: <20200320140308.4FBBB18C073@mercury.lcs.mit.edu> Message-ID: On Fri, 20 Mar 2020, Grant Taylor via COFF wrote: > However, I have to stop and think about how to enter this on an RPN > calculator. I'll take a swing at this, but I might get it wrong, and I > don't have anything handy to test at the moment. > > [a] [enter] > [a] [enter] > [multiply] > [b] [enter] > [b] [enter] > [multiply] > [add] > [square root] # to solve for c [a] [square] [enter] [b] [square] [+] [sqrt] (You don't need those extra "enter" keys, as the display is implicitly the top of the stack.) > (12 keys) 7. Well, "square" also needs the orange "shift" key, so that's really 9, but the number of keystrokes ain't exactly the point; it's not a race, but a method of thinking. > Conversely infix notation for comparison. > > [a] > [square] > [plus] > [b] > [square] > [square root] > > (6 keys) [...] Well, it really comes down to the calculation that you are trying to perform. Trivial example: 1 + 1 = -> 4 keys. 1 enter 1 add -> 4 keys. I don't have an algebraic calculator right to hand, but I'd imagine that solving a second-order polynomial (without a built-in program!) would involve fewer keys when using RPN because of the stack for intermediate results; a quick estimate is around 30 keys (with single-digit numbers) to get one of the roots, and you could probably save the result of most of it on the stack for re-use to get the other root (and the 42S groks complex numbers as a bonus[*], but that's hardly as a result of RPN). The 42S also has a handy "swap x/y" if the operands are the wrong way around, another one to rotate the stack, etc. You don't do Computer Science without being exposed to RPN, and I had to wait for a salary-in-lieu payout (long story) before I could afford the 42S that I'd been drooling over (and forget the overpriced IR printer[#]). [*] 1 +/- SQRT => "0.00 i1.00" (I have the display precision set to 2 because I use it for monetary stuff a lot; the internal precision is 15 digits). [#] A dream of mine is to reverse-engineer the printer protocol, then grab it using a laptop camera. Here endeth today's HP-42S lesson... -- Dave