Lobb Numbers for the HP-41
Overview
1°) Program#1
2°) Logarithm of Lobb Numbers
3°) Multiprecision
1°) Program#1
-Lobb numbers are defined by Lm,n = [(2m+1)/(m+n+1)]
(2n) ! / [ (m+n) ! (n-m) ! ]
Data Registers: /
Flags: /
Subroutines: /
01 LBL "LOB"
02 STO Z 03 ST+ Z 04 X<>Y 05 - 06 X=0? 07 GTO 00 08 LASTX 09 ST+ X 10 ISG X 11 LBL 01 12 RCL Z 13 * 14 RCL Y 15 / 16 DSE Z 17 DSE Y 18 GTO 01 19 R^ 20 / 21 LBL 00 22 X=0? 23 SIGN 24 END |
( 42 bytes / SIZE 000 )
STACK | INPUTS | OUTPUTS |
Y | m | / |
X | n | Lm,n |
Where m , n are non-negative & m <= n
Examples:
7 ENTER^
12 XEQ "LOB" >>>> L7,12 = 31878
12 ENTER^
41 R/S
>>>> L12,41 ~ 5.822503535 E21
---Execution time = 9s---
Notes:
-We have L0,n = Cn = Catalan number, so
we can use this routine to calculate Cn
-Here are the first values:
n \ m | 0 1 2
3 4 5
0 | 1
1 | 1
1
2 | 2
3 1
3 | 5
9 5 1
4 | 14 28 20 7
1
5 | 42 90 75 35 9
1
2°) Logarithm of Lobb Numbers
-If Lm,n > 9.999999999 E99 , the previous routine
will produce an OUT OF RANGE
-Taking the decimal logarithms will return a good result - but less
accurate.
Data Registers: /
Flags: /
Subroutines: /
01 LBL "LOGLB"
02 STO Z 03 ST+ Z 04 X<>Y 05 - 06 X=0? 07 GTO 00 08 LASTX 09 ST+ X 10 1 11 + 12 LOG 13 LBL 01 14 RCL Z 15 LOG 16 + 17 RCL Y 18 LOG 19 - 20 DSE Z 21 DSE Y 22 GTO 01 23 R^ 24 LOG 25 - 26 LBL 00 27 END |
( 46 bytes / SIZE 000 )
STACK | INPUTS | OUTPUTS |
Y | m | / |
X | n | Log ( Lm,n ) |
Where m , n are non-negative & m <= n
Example:
128 ENTER^
357 XEQ "LOGLB" >>>>
Log L128,357 ~ 192.7815403
---Execution time = 2m57s---
-Whence L128,357 ~ 6.04700 10192
3°) Multiprecision
-This program employs Lm-1,n = [(2m-1).(n+m+1)] / [(2m+1).(n-m+1)]
Lm,n recursively, starting with Ln,n
= 1
Data Registers: R00 = n
R01...................Rkk = Lm,n by groups of 6 digits
Flags: /
Subroutines: /
01 LBL "LOBM"
02 STO 00 03 STO N 04 X<>Y 05 - 06 STO M 07 1 08 STO 01 09 STO O 10 X<>Y 11 X=0? 12 GTO 09 13 GTO 01 14 LBL 11 15 RCL O 16 STO P 17 CLX 18 LBL 12 19 RCL IND P 20 RCL Z 21 * |
22 +
23 RCL X 24 PI 25 INT 26 ST+ X 27 10^X 28 MOD 29 STO IND P 30 ST- Y 31 X<> L 32 / 33 DSE P 34 GTO 12 35 X=0? 36 RTN 37 RCL O 38 E6 39 / 40 1.002 41 + 42 REGMOVE |
43 SIGN
44 ST+ O 45 X<>Y 46 STO 01 47 RTN 48 LBL 13 49 RCL O 50 E3 51 / 52 ISG X 53 STO P 54 CLX 55 LBL 14 56 RCL IND P 57 + 58 RCL X 59 RCL Z 60 MOD 61 ST- Y 62 X<> L 63 ST/ Y |
64 RDN
65 STO IND P 66 X<> L 67 PI 68 INT 69 ST+ X 70 10^X 71 * 72 ISG P 73 GTO 14 74 RTN 75 LBL 01 76 RCL N 77 ST+ X 78 DSE X 79 XEQ 11 80 RCL 00 81 RCL N 82 + 83 1 84 + 85 XEQ 11 |
86 RCL N
87 ST+ X 88 1 89 + 90 XEQ 13 91 RCL 00 92 RCL N 93 - 94 1 95 + 96 XEQ 13 97 DSE N 98 CLX 99 DSE M 100 GTO 01 101 LBL 09 102 RCL O 103 .1 104 % 105 ISG X 106 CLA 107 END |
( 176 bytes / SIZE var. )
STACK | INPUTS | OUTPUTS |
Y | m < n | / |
X | n | 1.kkk |
And Lm,n is stored in R01 ....... Rkk by groups of 6 digits
Example1: Calculate L7,12
7 ENTER^
12 XEQ "LOBM" >>>> 1.002
---Execution time = 22s---
R01 = 0
R02 = 31878
whence L7,12 = 31878
Example1: Calculate L12,41
12 ENTER^
41 R/S
>>>> 1.005
---Execution time = 4m40s---
R01 = 0
R02 = 5822
R03 = 503531
R04 = 254673
R05 = 98000
whence L12,41 = 5822503531254673098000
Notes:
-Register R01 often contains 0
-Add 0's on the left if there are less than 6 digits in R02 .... Rkk
-Synthetic register P is used, so don't stop this program.
-There is a risk of roundoff errors if n > 5000.
-So, only use this program with n < 5000 - except if n-m
is very small...
References:
[1] https://en.wikipedia.org/w/index.php?title=Lobb_number&oldid=880934174
[2] On-line Encyclopedia of Integer Sequences - www.oeis.org/A039599