Perform two successive binary operations on same input - Printable Version +- HP Forums ( https://www.hpmuseum.org/forum)+-- Forum: HP Calculators (and very old HP Computers) ( /forum-3.html)+--- Forum: General Forum ( /forum-4.html)+--- Thread: Perform two successive binary operations on same input ( /thread-14555.html) |

Perform two successive binary operations on same input - cdmackay - 02-23-2020 01:03 AM
[this is perhaps a little simplistic to be of interest, but…] I often want to perform two successive binary operations (i.e. operations with two operands/arguments) on the same input, leaving the two results in the two lower stack levels. An example might be finding the quotient and remainder (DIV/MOD) of two integers, on calculators that don't have a combined operation such as e.g 41/SandMath QREM, 50g IDIV2, Prime iquorem(). That often requires the first operation to be a binary operation followed by one or more unary operations, e.g. ÷ IP, followed by the second binary operation, e.g. MOD. My clumsy efforts are as follows; I've not yet considered using STO/RCL methods, which might be useful if stack preserving was a requirement. This is for interactive use; of course a program could be simpler. I'd be interested in hearing of quicker/easier/more elegant methods. RPN (stack not preserved) Code: `Y ENTER ENTER X ENTER` if the RPN example has just a single first binary operation, with no successive unary operations, it's much simpler: RPN (stack not preserved) Code: `Y ENTER ENTER X` RPL (uses stack levels 1–4) Code: `Y X DUP2` if the RPL example has just a single first binary operation, with no successive unary operations, it's much simpler: RPL (uses stack levels 1–4) Code: `Y X` RE: Perform two successive binary operations on same input - cdmackay - 02-23-2020 01:53 AM
arg! I stupidly forgot that RPL LASTARG will restore both args, which makes the RPL case trivial; ah well. RE: Perform two successive binary operations on same input - cdmackay - 02-23-2020 01:55 AM
Although, LASTARG will only work if there's just one operation. e.g. in my example, on many calcs the quotient requires two operations: ÷ IP, and so LASTARG won't restore the original Y X. The RPL example in the first post will allow successive unary operations after the first binary operation. RE: Perform two successive binary operations on same input - cdmackay - 02-23-2020 07:34 AM
and there's a similar use of LASTX that can be used to simplify the RPN case, again if there's only the one binary operation. I'll edit that in too. RE: Perform two successive binary operations on same input - Csaba Tizedes - 02-23-2020 09:39 AM
(02-23-2020 01:03 AM)cdmackay Wrote: I often want to perform two successive binary operations... Sure! Check the attachment, there is my opinion about "Tricky-Genius-Programming-Style" - just as a practical engineer point of view... So, with STO and RCL, with one flag and with lots of labels: LBL A and LBL B: the two binary operation LBL S: store the stack status LBL T: store previous result LBL R: restore the stack status variable R: previous result flag 0: set, if the stack X is the previous result for the first running clear the flag 0 Code:
Csaba https://www.hpmuseum.org/forum/attachment.php?aid=8104 RE: Perform two successive binary operations on same input - ttw - 02-23-2020 04:10 PM
On the hp50g, I've done this several way depending on the desired operations. Sometimes I do things like (assuming two operands on the stack): MAX LASTARG MIN In other cases: DUP2 "ops leaving single result" UNROT I often need things like IDIV2 but that's so slow that IQUOT (or even / FLOOR) and MOD with LASTART or DUP2 are much faster. RE: Perform two successive binary operations on same input - cdmackay - 02-23-2020 05:23 PM
hah! very good, I agree thanks for all the suggestions, will study. forgot about UNROT too. I've been mostly doing this interactive, so hadn't even thought about performance e.g. IDIV2, good point thanks! |