Showing posts with label HP 32S. Show all posts
Showing posts with label HP 32S. Show all posts

Saturday, August 9, 2025

RPN: HP 15C and DM32: Integer Length and Digit Extraction

RPN: HP 15C and DM32: Integer Length and Digit Extraction (up to 99,999,999)



The following programs are utilities for positive integers:


(1) Integer Length: how many digits in a positive integer

(2) Digit Extraction: Get the nth digit of a positive integer


Note:  Do not use more than 8 digits (integers up to 99,999,999).   Beyond this, the program may return inaccurate answers.  

Thanks to J-F Garnier for pointing out the limitation of the programs.  


Integer Length


Find the number of digits of a positive integer. The integer is decimal base (base 10).


For a positive integer n, the number of the digits can be easily found by the formula:


L = int(log(x)) + 1



DM32, HP 32S, HP 32SII Code


L01 LBL L

L02 LOG

L03 IP

L04 1

L05 +

L06 RTN


HP 15C, DM15 Code


001

42, 21, 11

LBL A

002

43, 13

LOG

003

43, 44

INT

004

1

1

005

40

+

006

43, 32

RTN


The program finds the number of digits in the positive integer in the X stack.


Examples:


X = 436782; Length: 6

X = 5195008; Length: 7

X = 23156956; Length: 8


Digit Extraction


Extract the nth digit of a positive integer. Digit positions go from left to right. For example: for the integer 4582, the 1st digit is 4, the 2nd digit is 5, 3rd digit is 8, and 4th digit is 2.


Steps that this program follows:

Step 1: Find the length of the positive integer. L = int(log(x)) + 1.

Step 2: Divide X by 10^(L – n + 1). D = X / (10^(L – n + 1))

Step 3: Extract the fractional part. D = frac(D)

Step 4: Multiple the result by 10 and extract the integer part. D = int(10 * D)


Setting up the stack:

Y: integer

X: nth digit to extract


Variables Used:

DM32, HP 32S, HP 32S II

HP 15C, DM15

X

R1

N

R2

L

R3



DM32, HP 32S, HP 32SII Code


E01 LBL E

E02 STO N

E03 R↓

E04 STO X

E05 LOG

E06 IP

E07 1

E08 +

E09 STO L

E10 RCL X

E11 RCL L

E12 RCL- N

E13 1

E14 +

E15 10^x

E16 ÷

E17 FP

E18 10

E19 ×

E20 IP

E21 RTN


HP 15C, DM15 Code


001

42, 21, 12

LBL B

002

44, 2

STO 2

003

33

R↓

004

44, 1

STO 1

005

43, 13

LOG

006

43, 44

INT

007

1

1

008

40

+

009

44, 3

STO 3

010

45, 1

RCL 1

011

45, 3

RCL 3

012

45, 30, 2

RCL- 2

013

1

1

014

40

+

015

13

10^x

016

10

÷

017

42, 44

FRAC

018

1

1

019

0

0

020

20

×

021

43, 44

INT

022

43, 32

RTN


Examples


Integers

Length

2nd Digit

4th Digit

5th Digit

436782

6

3

7

8

5195008

7

1

5

0

23156956

8

3

5

6



Eddie


All original content copyright, © 2011-2025. 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.


All posts are 100% generated by human effort.  The author does not use AI engines and never will.


Saturday, July 12, 2025

RPN: HP 32S/DM32: Simple Harmonic Motion

RPN: HP 32S/DM32: Simple Harmonic Motion


Introduction


The simple harmonic motion (SHM) of a spring can be described by Hooke’s Law:


F = -K * x(t)


x(t) = position of the spring

F = force of the spring


Note that: F = mass * acceleration = M * x’’(t)

Then:


M * x’’(t) = - K * x(t)

M * x’’(t) + K * x(t) = 0

x’’(t) + (K / M) * x(t) = 0


Without going into much details, two general solutions can have the form:


Case I:

x(t) = A * sin(W * t + B) with W = √(K / M) (A, B are constants)


and


Case II:

x(t) = A * cos(W*T + D) with W = √(K / M) (A, D are constants)


Believe it or not, both solutions work.


Case I:

x(t) = A * sin(W * t + B)

x’(t) = A * W * cos(W * t + B)

x’’(t) = -A * W^2 * sin(W * t + B)


Observe:

x’’(t) = -A * W^2 * sin(W * t + B)

x’’(t) = -W^2 * (A * sin(W * t + B))

x’’(t) = -W^2 * x(t)


W = √(K / M), W^2 = K / M


x’’(t) = -(K / M) * x(t)

M * x’’(t) = -K * x(t)

We are back to Hooke’s Law.


Case II:

x(t) = A * cos(W * t + D)

x’(t) = -A * W * sin(W * t + D)

x’’(t) = -A * W^2 * cos(W * t + D)


Then:

x’’(t) = -W^2 * (A * cos(W * t + D))

x’’(t) = -W^2 * x(t)

x’’(t) = -(K / M) * x(t)

M * x’’(t) = -K * x(t)

We once again arrive at Hooke’s Law. Another valid solution.


These two solutions are chosen for simplicity. A general solution would take the form of:

x(t) = A2 * cos(W * t + D) + A2 * sin(W * t + B)



Determining the Constants


Let:

x0 = initial position, at t = 0

v0 = initial velocity, at t = 0


Let’s use the simplified solutions.


Case I: Sine Approach


x(t) = A * sin(W * t + B)

x’(t) = A * W * cos(W * t + B)


x0 = A * sin(B)

v0 = A * W * cos(B)


x0 = A * sin(B)

v0 / W = A * cos(B)


Square each equation and add:

x0^2 + (v0 / W)^2 = A^2 * ((sin B)^2 + (cos B)^2)

x0^2 + (v0 / W)^2 = A^2 * 1

( x0^2 + (v0 / W)^2 ) = A

A = √( x0^2 + (v0 / W)^2 )


Divide the top equation by the bottom equation:

x0 / (v0 / W) = tan(B) (assume A ≠ 0)

B = arctan( x0 / (v0 / W) )

atan2( x0, (v0 / W)) = arg( (v0 / W) + x0*i ) where i = √-1


Case II: Cosine Approach


x(t) = A * cos(W * t + D)

x’(t) = -A * W * sin(W * t + D)


x0 = A * cos(D)

v0 = -A * W * sin(D)


x0 = A * cos(D)

v0 / W = -A * sin(D)


Square each equation and add:

x0^2 + (v0 / W)^2 = (A * cos(D))^2 + (-A * sin(D))^2

x0^2 + (v0 / W)^2 = A^2 * cos(D)^2 + (-A) *(-A) * sin(D)^2

x0^2 + (v0 / W)^2 = A^2 * cos(D)^2 + A^2 * sin(D)^2

x0^2 + (v0 / W)^2 = A^2 * 1

( x0^2 + (v0 / W)^2 ) = A

A = √( x0^2 + (v0 / W)^2 )


Divide the top equation by the bottom equation:

x0 / (v0 / W) = -cot(D) (assume A ≠ 0)

(v0 / W) / x0 = -tan(D)

-(v0 / W) / x0 = tan(D)

D = arctan(-(v0 / W) / x0)

atan2( -(v0 / W), x0) = arg( x0 - (v0 / W)*i)


The atan2, arg, and similarly, the rectangular to polar conversion functions are used to allow for all angles, including angles in the form of π/2 + n*π.


The following code demonstrates the two basic approaches, using the classic HP 32 (and which can be used on HP 32SII, DM32, HP 33S).



HP 32S Code


The variables:


X = (initial) position of the spring. When the spring is at it’s natural or neutral position, X = 0. (SI: unit m)

V = (initial) velocity of the spring. If V<0, the spring is getting shorter. If V>0, the spring is getting longer.

M = mass of the object attached to the end of the string (SI: unit kg)

K = spring’s force constant (N/m, kg/s^2)

A = amplitude of the spring (m)


Labels:

LBL I: Initialization, calculate W = √(K / M), and A = √(X^2 + V^2/W^2)

(HP 32S Memory: I: 34.5 bytes)


I01 LBL I

I02 INPUT K

I03 INPUT M

I04 INPUT X

I05 INPUT V

I06 RAD

I07 RCL K

I08 RCL÷ M

I09 SQRT

I10 STO W

I11 VIEW W

I12 RCL X

I13 x^2

I14 RCL V

I15 x^2

I16 RCL W

I17 x^2

I18 ÷

I19 +

I20 SQRT

I21 STO A

I22 VIEW A

I23 RTN


Sine Approach: x(t) = A * sin(W*T + B); W = √(K / M)

LBL S: Calculate B, then calculates X from time = 0 seconds to T seconds (per second)

(HP 32S Memory: S: 21.0 bytes, U: 16.5 bytes)


S01 LBL S

S02 RCL X

S03 RCL V

S04 RCL W

S05 ÷

S06 y,x→Θ,r

S07 x<>y

S08 STO B

S09 VIEW B

S10 INPUT T

S11 3

S12 10^x

S13 ÷

S14 STO T

U01 LBL U

U02 RCL T

U03 IP

U04 RCL× W

U05 RCL+ B

U06 SIN

U07 RCL× A

U08 STOP

U09 ISG T

U10 GTO U

U11 RTN



Cosine Approach: x(t) = A * cos(W*T + D); W = √(K / M)

LBL C: Calculate D

LBL D: Calculate X from time = 0 seconds to T seconds (per second)

(HP 32S Memory: C: 22.5 bytes, U: 16.5 bytes)


C01 LBL C

C02 RCL V

C03 RCL W

C04 ÷

C05 +/-

C06 RCL X

C07 y,x→Θ,r

C08 x<>y

C09 STO D

C10 VIEW D

C11 INPUT T

C12 3

C13 10^x

C14 ÷

C15 STO T

E01 LBL E

E02 RCL T

E03 IP

E04 RCL× W

E05 RCL+ D

E06 COS

E07 RCL× A

E08 STOP

E09 ISG T

E10 GTO E

E11 RTN


Examples


The calculator is set to FIX 5 mode.


Example 1:

K = 40, M = 1.33, V = 0, X = 0.3. Up to 5 seconds


Results:

W = 5.48408, A = 0.30000



Sine Approach (LBL S)

Cosine Approach (LBL C)

Time (seconds)

B = 1.57080 (Ï€/2)

D = 0

0

0.30000

0.30000

1

0.20921

0.20921

2

-0.00822

-0.00822

3

-0.22067

-0.22067

4

-0.29955

-0.29955

5

-0.19711

-0.19711



Example 2:

K = 48, M = 3, V = 0, X = -0.5. Up to 5 seconds


Results:

W = 4.00000, A = 0.50000



Sine Approach (LBL S)

Cosine Approach (LBL C)

Time (seconds)

B = -1.57080 (-Ï€/2)

D = 3.14159 (Ï€)

0

-0.50000

-0.50000

1

0.32682

0.32682

2

0.07275

0.07275

3

-0.42193

-0.42193

4

0.47883

0.47883

5

-0.20404

-0.20404



Sources


“Simple Harmonic Motion” Hyperphysics. http://hyperphysics.phy-astr.gsu.edu/hbase/shm.html Retrieved February 7, 2025.


LibreTexts Physics. “15.2: Simple Harmonic Motion” https://phys.libretexts.org/Bookshelves/University_Physics/University_Physics_(OpenStax)/Book%3A_University_Physics_I_-_Mechanics_Sound_Oscillations_and_Waves_(OpenStax)/15%3A_Oscillations/15.02%3A_Simple_Harmonic_Motion Retrieved February 6, 2025.


Rodicek, Danny. Mathematics & Physics for Programmers Hingham, MA. 2005. ISBN 1-58450-330-0


Eddie


All original content copyright, © 2011-2025. 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 content on this blog is 100% generated by humans. The author does not use AI engines and never will.


RPN: DM32 and DM42: Stopping Sight Distance (Metric)

RPN: DM32 and DM42: Stopping Sight Distance (Metric) The Stopping Sight Distance Formula – Derivation The stopping sight di...