(HP-67/97) Combinatorics - Extended factorial, gamma, permutations, combinations
|
06-15-2020, 01:42 PM
(This post was last modified: 06-15-2020 02:59 PM by Dave Britten.)
Post: #1
|
|||
|
|||
(HP-67/97) Combinatorics - Extended factorial, gamma, permutations, combinations
This program provides implementations of factorial (with support for numbers greater than 69), gamma, combinations (nCr), and permutations (nPr). They run in constant time without any looping (slightly faster for integers no greater than 69 when the built-in factorial can be used). It is 92 steps, and fits comfortably on one side of a card.
The program relies on using Nemes' formula to calculate an approximation of the natural logarithm of gamma without overflowing on large inputs. Large combinations/permutations are generally accurate to around 5 decimal places, but accuracy worsens as the difference between x and y increases (precision is lost when subtracting ln(x!) and ln(y!) when they differ greatly in magnitude). Keys A - ln(x!) B - ln(Γ) b - Γ(x) C - ln(yCx) c - yCx D - ln(yPx) d - yPx E - e^x→x*10^y e - Round Int Usage To use any of these functions, enter arguments in the x and y registers, and press the key for the desired function. The functions that return a natural logarithm will not overflow for large inputs/outputs. The shifted versions of Γ, nCr, and nPr return a decimal result to x, with the natural logarithm in y. Thus if the calculation overflows (9.999999999 99), it's not necessary to repeat the calculation, simply press x><y to get the natural logarithm of the result, and optionally press E to convert the power of e to a decimal mantissa in x, and exponent of 10 in y. Examples Calculate the natural log of 144!: 144 A *** 575.0575 (e^575.0575) Show a decimal approximation of 144! with the natural log of 144! already in x: E *** 5.5503 x><y *** 249 (5.5503*10^249) Calculate P(71, 3): 71 ENTER 3 f d *** 342930.0000 (yCx and yPx are automatically rounded to the nearest integer) Calculate C(278000, 47000): 278000 ENTER 47000 f c *** 9.999999999 99 (overflow) x><y *** 126317.0360 (e^126317.0360) E *** 6.1903 x><y *** 54858 (6.1903*10^54858) Code: LBL b |
|||
06-16-2020, 03:57 PM
Post: #2
|
|||
|
|||
RE: (HP-67/97) Combinatorics - Extended factorial, gamma, permutations, combinations
(06-15-2020 01:42 PM)Dave Britten Wrote: Large combinations/permutations are generally accurate to around 5 decimal places, but accuracy worsens as the difference between x and y increases (precision is lost when subtracting ln(x!) and ln(y!) when they differ greatly in magnitude). I think you meant precision is lost when subtracting 2 values similar in magnitude. For nPr where n ≫ r, ln(nPr) = ln(n!) - ln((n-r)!), both nearly equal. To avoid catastrophic cancellation, we can start with nPr ≈ n^r, and add a correction. Reusing code from my log of probability of no repetitions (ln_nr) Code: function ln_nr(n,s) return 0.5*s* log1p((s-1)*(s-2-6*n)/(6*n*n)) end Coded in HP12C (26 steps), with assumption n ≫ r Code: 1 STO 0 ; r Note: register X = ln_nr(n,r), Y = r*log(n). To get ln_nPr(n,r), press "+" Example, for ln_nPr(1e6, 100) 1e6 ENTER 100 [R/S] → X = -.004950165034, Y = 1381.551056 + → ln_nPr = 1381.546106 |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)