# hp41programs

approx Ellipse Perimeter for the HP-41

Overview

1°) Series

a)  Program#1
b)  Program#2

2°) Approximations

a)  Ramanujan#1
b)  Ramanujan#2

x2 / a2 + y2 / b2 = 1

1°)  Series

a)  Program#1

Formula:

With   e2 =  1 - b2 / a2       Perimeter = 2.Pi.a [ 1 - ( 1/2 )2 e2 / 1 - ( 1x3 / ( 2x4 ) )2 e4 / 3 - ( 1x3x5 / ( 2x4x6 ) )2 e6 / 5 - ........ ]

Data Registers:         R00 & R03 ... R05: temp

R01 = a    R02 = b
Flags:  /
Subroutines:  /

 01 LBL "EPM"  02 STO 02  03 X<>Y  04 STO 01            05 /  06 X^2  07 1  08 STO 00 09 STO 04  10 X<>Y  11 -  12 STO 03            13 RCL 00  14 LBL 01  15 RCL 04  16 RCL 00 17 ST+ X  18 1  19 ST+ 00  20 X<>Y  21 -  22 STO 05            23 LASTX  24 / 25 X^2  26 *  27 RCL 03  28 *  29 STO 04            30 RCL 05  31 /  32 + 33 X#Y?  34 GTO 01  35 RCL 01            36 ST+ X  37 *  38 PI  39 *  40 END

( 52 bytes / SIZE 006 )

 STACK INPUTS OUTPUTS Y a / X b perimeter

with  a >= b

Example:      a = 7     b = 5

7   ENTER^
5   XEQ "EPM"  >>>>   37.96136896                                     ---Execution time = 17s---

b)  Program#2

-We can use a faster formula:

Formula:     with  h = ( a-b ) / ( a+b )

Perimeter =  Pi ( a+b )  F ( -1/2 , -1/2 ; +1 ; h2 )      where  F = hypergeometric function.

Data Registers:         R00 ... R06: temp

R04 = a    R05 = b
Flags:  /
Subroutine:  "HGF"   ( cf "Hypergeometric Functions for the HP41" )

 01 LBL "EPM"  02 STO 05            03 X<>Y  04 STO 04  05 ST- Y 06 RCL 05  07 +  08 STO 06            09 /  10 X^2 11 2  12 1/X  13 CHS  14 STO 01            15 STO 02 16 SIGN  17 CHS  18 STO 03            19 X<>Y  20 XEQ "HGF" 21 RCL 06            22 *  23 PI  24 *  25 END

( 38 bytes / SIZE 007 )

 STACK INPUTS OUTPUTS Y a / X b perimeter

with  a >= b

Example1:      a = 7     b = 5

7   ENTER^
5   XEQ "EPM"  >>>>   37.96136892                                     ---Execution time = 5s---

Example2:      a = 41     b = 16

41   ENTER^
16   XEQ "EPM"  >>>>   187.7915357                                    ---Execution time = 7s---

2°)  Approximations

a)  Ramanujan#1

Formula:      Perimeter ~ Pi [ 3 ( a+b ) - sqrt ( (3a+b) (a+3b) ) ]

Data Registers:         R00 = a   R01 = b
Flags:  /
Subroutines:  /

 01 LBL "EPM"  02 STO 01            03 X<>Y  04 STO 00 05 +  06 RCL 01            07 3  08 ST* Z 09 *  10 RCL 00            11 ST+ Y  12 LASTX 13 *  14 RCL 01            15 +  16 * 17 SQRT            18 -  19 PI  20 *  21 END

( 31 bytes / SIZE 002 )

 STACK INPUTS OUTPUTS Y a / X b perimeter

Example:       a = 7     b = 5

7   ENTER^
5   XEQ "EPM"  >>>>   37.96136732                                   ---Execution time = 1s---

b)  Ramanujan#2

Formula:    with  h = ( a-b ) / ( a+b )

Perimeter ~ Pi ( a+b ) [ 1 + 3 h2 / ( 10 + sqrt ( 4 - 3 h2 ) ]

Data Registers:         R00 = a+b   R01 = a  R02 = b
Flags:  /
Subroutines:  /

 01 LBL "EPM"  02 STO 02            03 X<>Y  04 STO 01  05 ST- Y 06 RCL 02  07 +  08 STO 00            09 /  10 X^2 11 3  12 *  13 4  14 RCL Y            15 - 16 SQRT  17 10  18 +  19 /  20 RCL 00 21 ST* Y            22 +  23 PI  24 *  25 END

( 37 bytes / SIZE 003 )

 STACK INPUTS OUTPUTS Y a / X b perimeter

Example1:       a = 7     b = 5

7   ENTER^
5   XEQ "EPM"  >>>>   37.96136896                                     ---Execution time = 1s---

Example2:      a = 41     b = 16

41   ENTER^
16   XEQ "EPM"  >>>>   187.7915342                                    ---Execution time = 1s---

Note:

-This formula is often very accurate !