Showing posts with label stack. Show all posts
Showing posts with label stack. Show all posts

Saturday, February 14, 2026

RPN: Absolute Value Equations with the HP 11C and DM41X

RPN: Absolute Value Equations with the HP 11C and DM41X



Introduction: Solving |z * w + y| = x


Today’s blog focuses on solving the absolute value equation:


|z * w + y| = x


for the variable w, and the values of z, y, and x are given and are on the Classic RPN stack.


For example, in the problem |5 * w + 7| = 2, the stack would be set up as:


t: (anything, it doesn’t matter)

z: 5

y: 7

x: 2


(This is why I set the variable as w instead of the usual x.)


One approach is to use memory registers and other uses only stack operations. Today’s algorithm focuses on the latter.


Caution: In the above equation, x will always be non-negative. The equation will never be valid if x is negative.



The Algebra


Solve for w:

|z * w + y| = x


This leads us to solve the two equations:


(I)

z * w + y = -x

z * w = -x – y

w = -x/z – y/z


Let w- = -x/z – y/z = (-x/z) + (-y/z)


(II)

z * w + y = x

z * w = x – y

w = x/z - y/z


Let w+ = x/z – y/z = (x/z) + (-y/z)


Then:


w- = -x/z – y/z

w- = (-x/z) + (-y/z)

w- = (-x/z) + (-y/z) + (-x/z) + (x/z)

w- = 2 * (-x/z) + (x/z) + (-y/z)

w- = 2 * (-x/z) + w+


RPN Code: HP 11C (adoptable for other RPN calculators)


LBL A

001

42, 21, 11

Program start

R↓

002

33


R↓

003

33


X<>Y

004

34


R↓

005

33


1/x

006

15


×

007

20


LST x

008

43, 36


X<>Y

009

34


R↓

010

33


×

011

20


LST x

012

43, 36


R↑

013

43, 33


X<>Y

014

34


R↓

015

33


X<>Y

016

34


CHS

017

16


X<>Y

018

34


+

019

40


ENTER

020

36


ENTER

021

36


LST x

022

43, 36


-

023

30


LST x

024

43, 36


-

025

30


RTN

026

43, 32

Program end


RPN Code: DM41X (HP 41C series, no module is required)


LBL “ASBEQ”

RDN

RDN

X<>Y

RDN


1/x

×

LAST X

X<>Y

RDN

×

LAST X

R↑

X<>Y


RDN


X<>Y

CHS

X<>Y


+

ENTER

ENTER

LAST X

-

LAST X

-


RTN



Notes:

* RDN is shown as R↓

* To enter R↑, press XEQ, ALPHA, R, SHIFT, ENTER, ALPHA



Subroutines Used


We used several techniques to manipulate the stack. They are presented below:


Rotate stack from X, Y, Z, T to Z, X, Y, T

R↓

R↓

X<>Y

R↓


Source:

Ball, John A. Algorithms for RPN Calculators John Wiley & Sons: New York. 1978. ISBN 0-471-03070-8. pg. 78



Multiply Y and Z by 1/X. Stack: X, Y, Z, T → X, Y/X, Z/X, T


1/x

×

LAST X

X<>Y

R↓

×

LAST X

R↑

X<>Y


Change X, Y to Y+ X, Y – X


+

ENTER

ENTER

LAST X

-

LAST X

-


The resulting stack is:


z

z

y + x

y – x


Doing LAST X, -, twice is effectively subtracting whatever is in L register twice.



Examples


|4 * w – 6| = 5


Stack:

z: 4

y: -6

x: 5


Results:

y: 2.75

x: 0.25


|2 * w + 5| = 3


Stack:

z: 2

y: 5

x: 3


Results:

y: -1

x: -4




Eddie


All original content copyright, © 2011-2026. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.

Sunday, January 18, 2026

HP 15C: Distance and Slope Between Two Points Using Polar Conversion and the Stack

HP 15C: Distance and Slope Between Two Points Using Polar Conversion and the Stack



HP 15C Program: Distance and Slope



This short program calculates the slope and distance between two Cartesian points (x1, y1) and (x2, y2) using the four level stack and rectangular-polar conversion. The code can be adopted to other Hewlett Packard, Swiss Micros, and other RPN with four-stacks. RPL will need a short adjustment.



Input Stack:

T: y2

Z: x2

Y: y1

X: x1



Code:

LBL A

001

42, 21, 11

Program start

X<>Y

002

34


R↓

003

33


-

004

30


R↓

005

33


-

006

30


CHS

007

16


R↑

008

43, 33

Y: Δy, X: Δx

→P

009

43, 1

Rectangular to polar conversion; calculate distance

X<>Y

010

34


TAN

011

25

Calculate slope

X<>Y

012

34


RTN

013

43, 32

Program end









Reference formulas



Distance = √((x2^2 – x1^2) + (y2^2 – y1^2))

Slope = (y2 – y1) ÷ (x2 – x1) = tan(Θ)



Derivation:

Let y’ = y2 – y1 and x’ = x2 – x1

Then by rectangular to polar function, angle:

Θ = arctan( y’ / x’ )

tan Θ = y’ / x’

tan Θ = (y2 – y1) ÷ (x2 – x1)



Examples



Example 1: (-3, 8) to (11, 16)

Stack:

T: 16

Z: 11

Y: 8

X: -3

Result:

Y: slope ≈ 0.5714

X: distance ≈ 16.1245



Example 2: (5, 6) to (7, 9)

Stack:

T: 9

Z: 7

Y: 6

X: 5

Result:

Y: slope = 1.5000

X: distance ≈ 3.6056


Eddie


All original content copyright, © 2011-2026. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.

Saturday, January 10, 2026

RPN: A Comparison of Programming Methods: Stack vs. Storage Arithmetic with the HP 32SII

RPN: A Comparison of Programming Methods: Stack vs. Storage Arithmetic with the HP 32SII


News: The RPN series will continue for 2026: Every second Sunday!


Today we will compare two methods to tackle mathematical problems with the HP 32SII. The code presented here will also work with the HP 32S original and the Swiss Micros DM32.


Method 1 (left column): Use of the stack and when necessary, variables to store immediate results.


Method 2 (right column): Use of storage arithmetic to most, if not all, of the arithmetic operations.



What is Storage Arithmetic?


Storage arithmetic executes an arithmetic operation while simultaneously storing the result in the variable.


In all the examples, assume the variable Z starts with the value of 10.


STO+: Storage Addition

Adds the value in the display to the value stored in the variable and stores the result. Outside of RPN and Hewlett Packard calculators, storage addition is the most common storage arithmetic function. On four function calculators and adding machines, storage arithmetic is symbolized with M+. On Texas Instruments scientific calculators, such as the TI-30Xa and the classic TI-30 series, storage addition occurs with the SUM key.


2 STO+ Z adds 2 to Z. The value of Z is now 12.


In Python, the general syntax for storage addition:

var+=<expression>


STO-: Storage Subtraction


Subtracts the value in the display from the value stored in the variable and stores the result. On four function calculators and adding machines, storage arithmetic is symbolized with M-. If you have a TI-55 (1970s version), TI-57 (1970s version), TI-58, TI-59, or T-66, storage subtraction is executed by INV SUM.


2 STO- Z subtracts 2 from Z. The value of Z is now 8.


In Python, the general syntax for storage subtraction:

var-=<expression>



STO×: Storage Multiplication


Multiplies the value in the display from the value stored in the variable and stores the result. If you have a TI-55 (1970s version), TI-57 (1970s version), TI-58, TI-59, or T-66, storage subtraction is executed by Prod (or Prd).


2 STO× Z multiplies 2 to Z. The value of Z is now 20.


In Python, the general syntax for storage multiplication:

var*=<expression>



STO÷: Storage Multiplication


Multiplies the value in the display from the value stored in the variable and stores the result. If you have a TI-55 (1970s version), TI-57 (1970s version), TI-58, TI-59, or T-66, storage subtraction is executed by INV Prod (or Prd).


2 STO÷ Z divides Z by 2. The value of Z is now 5.


In Python, the general syntax for storage multiplication:

var/=<expression>


Example Problems


For fairness, both methods store the final result in Z. Only storage arithmetic is used because not all RPN calculators have recall arithmetic.


Problem 1: (1 + √5) ÷ 2 ≈ 1.61803398875


LBL A

5

SQRT

1

+

2

÷

STO Z

RTN


15.0 bytes

LBL B

1

STO Z

5

SQRT

STO+ Z

2

STO÷ Z

RCL Z

RTN


15.0 bytes


Problem 2: 4² + 3 × 4 – 5 = 4 × (4 + 3) – 5 = 23


LBL C

4

STO X

3

+

RCL X

×

5

-

STO Z

RTN


15.0 bytes

LBL D

4

STO X

STO Z

3

STO+ Z

4

STO× Z

5

STO- Z

RCL Z

RTN


18.0 bytes



Problem 3: √(8.5² + 9.6²) ≈ 12.8222462931


LBL E

8.5

9.6

+

SQRT

STO Z

RTN


29.5 bytes

LBL F

8.5

STO Z

STO× Z

9.6

STO Y

STO× Y

RCL Y

STO+ Z

RCL Z

SQRT

STO Z

RCL Z

RTN


37.0 bytes


Problem 4: (7 × 12) ÷ (7 + 12) ≈ 4.42105263158


LBL G

7

STO X

12

STO Y

×

RCL X

RCL Y

+

÷

STO Z

RTN


18.0 bytes

LBL H

7

STO X

STO Y

12

STO× X

STO+ Y

RCL X

RCL Y

÷

STO Z

RTN


19.5 bytes


Problem 5: 1 ÷ (1 ÷ 4.5 + 1 ÷ 8 + 1 ÷ 6.7) ≈ 2.01419624217


LBL I

4.5

1/x

8

1/x

6.7

1/x

+

+

1/x

STO Z

RTN


35.5 bytes

LBL J

4.5

1/x

STO Z

8

1/x

STO+ Z

6.7

1/x

STO+ Z

RCL Z

1/x

STO Z

RCL Z

RTN


38.5 bytes


Problem 6: 2 × (10.3 – 4.9) + 3 × (5.4 – 2) = 21


LBL K

10.3

4.9

-

2

×

5.4

2

-

3

×

+

STO Z

RTN


45.0 bytes

LBL L

10.3

STO Y

4.9

STO- Y

2

STO× Y

5.4

STO Z

2

STO- Z

3

STO× Z

RCL Y

STO+ Z

RCL Z

RTN


49.5 bytes



Findings


I like storage arithmetic. However from these results, storage arithmetic uses a bit more memory than merely using the stack. Storage arithmetic can be handy dandy technique in programming, not just in keystroke programming but other programming languages like Python.



Eddie


All original content copyright, © 2011-2026. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.


The author does not use AI engines and never will.


TI-84 Plus CE: Logistic Map

TI-84 Plus CE: Logistic Map It feels like forever since I with the TI-84 Plus CE. Introduction The program LOGISTIC plots ...