Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant

02202017, 12:40 AM
Post: #41




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
(02192017 10:25 PM)BartDB Wrote: Taking into account Joe's comment on accuracy by summing from 1/F (n) first, my attempt on the 50g: Nice use of the infinite stack! Well, that's what it is for, anyway. Too bad ΣLIST doesn't work with oneelement lists (any reason berhind this feature?), otherwise you could have saved 1.5 bytes: Code:
60 bytes, but fails for n = 1 ( ΣLIST Error: Invalid Dimension ). Gerson. 

02202017, 08:08 AM
Post: #42




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
(02172017 07:09 AM)Paul Dale Wrote: Sigma is a key stroke program that Kahan sums the terms. (02182017 03:38 AM)Paul Dale Wrote: The 34S [Sigma] command deliberately sums from the last term to the first on the assumption that summations will often be of convergent series and this should generally increase accuracy. My respect for you guys just went up another two notches. Werner 41CV†,42S,48GX,49G,DM42,DM41X,17BII,15CE 

02202017, 08:41 AM
Post: #43




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
(02172017 01:58 PM)Gerson W. Barbosa Wrote: HP48G (52.5 bytes) I have not verified all of them, but this one is not correct. 2 returns 1.5 and it should be 2, of course. Moreover, it's 50 bytes, not 52.5 Werner 41CV†,42S,48GX,49G,DM42,DM41X,17BII,15CE 

02202017, 10:34 AM
Post: #44




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
(02202017 08:41 AM)Werner Wrote:(02172017 01:58 PM)Gerson W. Barbosa Wrote: HP48G (52.5 bytes) 52.5 bytes here. Down to 50 without the first ROT, which causes the program to behave the way you mention. Are you sure you have entered it correctly? Regards, Gerson. 

02202017, 10:59 AM
Post: #45




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
I'm pretty sure I haven't ;)
missed the ROT after the DUP2. Sorry, my bad! Werner 41CV†,42S,48GX,49G,DM42,DM41X,17BII,15CE 

02202017, 01:57 PM
Post: #46




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
FX180P solution using K vars only:
Code: 01 Kout3 Usage example: KAC 5 Kin1 1 Kin2 P1 or using the pending operator method: Code: 01 Kout3 Usage example: KAC 5 Kin1 1 + + P1 Calculator Benchmark 

02202017, 04:41 PM
Post: #47




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
(02182017 04:12 AM)Claudio L. Wrote: While using REVLIST is fine, it's much slower than just adding in reverse order. (02182017 05:11 AM)Paul Dale Wrote: Wouldn't the time for the floating point additions far outweigh the time to reverse the list??? (02192017 02:27 PM)John Keith Wrote: On a physical HP50, REVLIST adds about 10ms for an input of 66, which seems to be the smallest value that gives a correct 12digit result. Seems to me a small price to pay for accuracy. You are both right, my tests revealed (at default 32digit precision): REVLIST for 2000 integers on a list: 5.7 ms INV for 2000 integers on a list: 86 ms ΣLIST for 2000 integers on a list: 63 ms So it's not worth adding the reverse sum, just use REVLIST. I didn't think it would be that fast. 

02212017, 12:33 PM
Post: #48




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
to 'Kahan sum' an exploded list, you may use:
In: ob1..obN N Out: Sum(ob1..obN) Code: \<< Unfortunately, for 12digit machines it makes no difference in RFC(25) and RFC(37) (summing small to large) Werner 41CV†,42S,48GX,49G,DM42,DM41X,17BII,15CE 

02232017, 09:01 PM
Post: #49




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
(02212017 12:33 PM)Werner Wrote: to 'Kahan sum' an exploded list, you may use: But RFC(37) is now only one ULP away from the exact 12digit result. SysRPL which doesn't round intermediate results to 12 digits might handle these and all others, no matter the summing order, I think. But I can't check this as I am SysRPL illiterate. Gerson. 

02232017, 09:15 PM
Post: #50




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
Just a long, slow and rather exotic solution:
Code:
Or, in HP 50gcompatible text: Code:
111 bytes « 56. RFC » TEVAL > 3.35988566622, s:30.4553 https://en.wikipedia.org/wiki/Fibonacci_number Gerson. 

02252017, 02:49 PM
(This post was last modified: 02252017 02:55 PM by Gerson W. Barbosa.)
Post: #51




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
If our only goal is just to compute the constant, the following does it faster by summing up about four times as less terms and adding a correction term:
HP42S Code:
6 XEQ RFC > 3.35988566624 ( 1.4 s ) HP42S code on wp34s: 18 A > 18 XEQ RFC > 3.359885666243177553172011302918926 ( 0.2 s, timed with TICKS ) HP41 Code:
7 XEQ ALPHA RFC ALPHA > 3.359885666 ( 3.7 s ) HP 50g Code:
<< 6 RFC >> TEVAL > 3.35988566624 ; s: .0946 Notes: 1) nonoptimized codes; 2) no proof why this works. 

02252017, 03:01 PM
Post: #52




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
"four times less" is a very awkward expression.


02252017, 09:55 PM
(This post was last modified: 02282017 06:08 PM by Gerson W. Barbosa.)
Post: #53




RE: Programming exercise (RPL/RPN)  Reciprocal Fibonacci Constant
In fact it is possible to obtain 10 digits starting with only the first four terms. A simple 7term continued fraction suffices for the rest:
1+1+1/2+1/3 + 1/(21/(101/(124/(229/(3416/(5625/(90))))))) = 3.35988566602 Denominators of the continued fraction: F(41)=2 F(41)+F(4+2)=10 10+2=12 12+10=22 22+12=34 34+22=56 56+34=90 ... Numerators: 1, 1, 1, 4, 9, 16, 25... Equal numbers of regular terms and continued fraction terms might be better. Edited to add a missing 's'. PS  Or more generically, for an even n: \[\psi \simeq \frac{1}{F_{1}}+\frac{1}{F_{2}}+\frac{1}{F_{3}}+\cdots +\frac{1}{F_{n1}}+\frac{1}{F_{n}}+\frac{1}{F_{n1}\frac{1}{F_{n+2}\cdot F_{1}+F_{n1}\cdot F_{2}\frac{1^{2}}{F_{n+2}\cdot F_{2}+F_{n1}\cdot F_{3}\frac{2^{2}}{F_{n+2}\cdot F_{3}+F_{n1}\cdot F_{4}\frac{3^{2}}{F_{n+2}\cdot F_{4}+F_{n1}\cdot F_{5}\frac{4^{2}}{F_{n+2}\cdot F_{5}+F_{n1}\cdot F_{6}\frac{5^{2}}{F_{n+2}\cdot F_{6}+F_{n1}\cdot F_{7}... }}}}}}}\] PPS  The following have been calculated with 10, 8 and 6 terms of the continued fraction, respectively. n=2 > 3.359876595167099 n=6 > 3.359885666018419 n=8 > 3.359885666243172 These examples require further tests to significantly more terms of the continued fraction. PPPS  Although the first four or five terms of the continued fraction in the generalization above are certainly correct it appears there is a problem with it as it obviously doesn't converge to the tree constants, no matter the number of continued fraction terms is increased, at least in my tests on the HP 50g. Anyway, these first few terms of the continued fraction do improve the convergence, especially for larger n. While this isn't solved the '=' symbol will be replaced with '≃'. Perhaps this should be done with 34 digits of accuracy on Free42 or wp34s in double precision with an equivalent RPN program. Code:
This is based upon Bart's program and requires two arguments: k (number of terms of the continued fraction in level 2: and n (number of terms of the regular series), with even n and k >= 3. Examples: 10 2 > 3.35987659517 50 2 > 3.35987659517 100 2 > 3.35987659517 3 4 > 3.35988200590 4 4 > 3.35988562091 5 4 > 3.35988566563 6 4 > 3.35988566601 7 4 > 3.35988566602 10 4 > 3.35988566602 4 6 > 3.35988566623 5 6 > 3.35988566624 3 8 > 3.35988566624 PPPPS  Now, this appears to be correct: \[\psi = \frac{1}{F_{1}}+\frac{1}{F_{2}}+\frac{1}{F_{3}}+\cdots +\frac{1}{F_{n1}}+\frac{1}{F_{n}}+\frac{1}{F_{n1}\frac{F_{1}^{2}}{F_{n+2}\cdot F_{1}+F_{n1}\cdot F_{2}\frac{F_{2}^{2}}{F_{n+2}\cdot F_{2}+F_{n1}\cdot F_{3}\frac{F_{3}^{2}}{F_{n+2}\cdot F_{3}+F_{n1}\cdot F_{4}\frac{F_{4}^{2}}{F_{n+2}\cdot F_{4}+F_{n1}\cdot F_{5}\frac{F_{5}^{2}}{F_{n+2}\cdot F_{5}+F_{n1}\cdot F_{6}\frac{F_{6}^{2}}{F_{n+2}\cdot F_{6}+F_{n1}\cdot F_{7}... }}}}}}}\] This should be obvious and indeed that's what I had tried in the beginning, but somehow I skipped one index, which may have led me astray. The first terms of the regular reciprocal series, 1/1 + 1/1 and 12 terms of the continued fraction give 12 correct digits: 2+1/(11/(41/(54/(99/(1425/(2364/(37169/(60441/(971156/(1573025/(2547921/441))))))))))) = 3.359885666241351 I will rewrite the RPL program above later and test this with 100 digits using the LongFloat library. 

« Next Oldest  Next Newest »

User(s) browsing this thread: 1 Guest(s)