01-22-2015, 08:07 AM
Greetings,
While playing with my new FX115es Plus from Casio I ran into the infamous Fibonacci sequence, once again, Fn = Fn-1 + Fn-2 using the classic 1 1 startup:
1 1 2 3 5 8 13 21 34 ...
The authors of the fx115 user guide were demonstrating the [Ans] + [PreAns] [=] iterative key sequence and were pleased that with the correct startup [1] [=], [+] [1] followed by repeating [Ans] + [PreAns] iteratively would generate the Fibonacci numbers line at a time 'till ad infinitum or 'till boredom; which ever came first prior to overflow.
That's the back-story; the fx115 in not programable and although the [PreAns] feature is relatively useful, the example was not terribly enlightening.
The little small exercise did give me pause to think about my new HP35s programable with classic four level stack, LASTx, RPN; ... and the iterative steps that would be necessary to conduct the same relatively painless example on the 35s--- bumping the Fibonacci sequence of numbers up the stack and out the TOP. The rules? Glad you asked: only stack manipulations allowed (no exchanges except for [x<>y]), only [+] operation, no direct nor indirect memory registers, and no loss of Fibonacci numbers until they leave the T level of the stack-- out the TOP. Also, we are assuming the classic startup of 1 1, NOT 0 1. Stop reading here and play with your HP a bit to see what you think the minimum steps are that produce the results manually, and then continue reading (you can use any classic HP to do this step).
Welcome back. The setup is:
... and the five(5) iterative steps are:
Try it.
So what? What if we automate the silly thing so that we can have the machine stop on whatever nth Fibonacci number we want (from a parmameter) and then allow us to step through the rest with [R/S] or watch it run 'slowly' with an embedded [PSE]?
Here is the program key sequence:
Run this code with the standard [XEQ] F [ENTER].
The machine will stop with 4 in x, waiting for the operator to accept the default, or change it to a higher integer. The largest integer which may be entered (without overflow) is 59. Clear the 4, and place 59 in the x stack position, then press [R/S].
Four and a half seconds later the stack will contain the last four Fibs from the nth and x will hold 956,722,026,041.
Run the program again, this time leaving the default of 4. The stack will hold
t 1
z 1
y 2
x 3
Now, press [R/S] and watch the Fibonacci numbers bump up the stack ad infinitum or boredom... whichever comes first prior to overflow.
Do THAT on your FX115es Plus, I double dare you.
PS It is well known that the ratio of any two consecutive Fibonacci numbers produces a more and more accurate convergence on the number phi:
(SQ(5)+1)/2. This happens accurately (more or less) for the HP35s at about the 29th iteration of the above program. Stop the sequence at the 29th iteration and then press [x<>y] [/] and you should see: 1.61803398875 ~phi more or less!
PSS The program may be interrupted with [R/S] but remember that since the main program never hits a RTN the program counter is stuck in the F program. Inadvertently hitting [R/S] again will restart the program (which you may not want).
To avoid this, when you're done playing, either delete F or press [GTO] [.] [.] to set the program counter to the TOP.
[/php]
Cheers
marcus
While playing with my new FX115es Plus from Casio I ran into the infamous Fibonacci sequence, once again, Fn = Fn-1 + Fn-2 using the classic 1 1 startup:
1 1 2 3 5 8 13 21 34 ...
The authors of the fx115 user guide were demonstrating the [Ans] + [PreAns] [=] iterative key sequence and were pleased that with the correct startup [1] [=], [+] [1] followed by repeating [Ans] + [PreAns] iteratively would generate the Fibonacci numbers line at a time 'till ad infinitum or 'till boredom; which ever came first prior to overflow.
That's the back-story; the fx115 in not programable and although the [PreAns] feature is relatively useful, the example was not terribly enlightening.
The little small exercise did give me pause to think about my new HP35s programable with classic four level stack, LASTx, RPN; ... and the iterative steps that would be necessary to conduct the same relatively painless example on the 35s--- bumping the Fibonacci sequence of numbers up the stack and out the TOP. The rules? Glad you asked: only stack manipulations allowed (no exchanges except for [x<>y]), only [+] operation, no direct nor indirect memory registers, and no loss of Fibonacci numbers until they leave the T level of the stack-- out the TOP. Also, we are assuming the classic startup of 1 1, NOT 0 1. Stop reading here and play with your HP a bit to see what you think the minimum steps are that produce the results manually, and then continue reading (you can use any classic HP to do this step).
Welcome back. The setup is:
Code:
[1]
[+]
[ENTER]
[ENTER]
Code:
[LASTx] (retrieves old Fn-2)
[x<>y] (sets up the sum LASTx will become next Fn-2)
[+] (adds Fn = Fn-1 + Fn-2 x holds Fn y holds Fn-3)
[LASTx] (retrieves new Fn-2)
[x<>y] (x holds old Fn [new Fn-1] y holds old Fn-1 [new Fn-2])
So what? What if we automate the silly thing so that we can have the machine stop on whatever nth Fibonacci number we want (from a parmameter) and then allow us to step through the rest with [R/S] or watch it run 'slowly' with an embedded [PSE]?
Here is the program key sequence:
Code:
F001 LBL F
F002 CLSTK
F003 0.00201 ( this sets up DSE counter register mantissa
F004 STO C ( iterative counter
F005 CLx
F006 4 ( default nth Fibonacci number (3) 1 1 2 3
F007 STOP ( get operator a chance to change the default
F008 STO+ C ( sets the final counter 4.00201
F009 CLx
F010 1 (begin 1 1 setup
F011 +
F012 ENTER
F013 XEQ F020 (call iterative sequence subroutine
F014 DSE C (decrement the counter and prepare to loop back
F015 GTO F013 (loop
F016 STOP (display nth Fibonacci ; stack holds last four Fibs
F017 XEQ F020 (begin automated continue with PSE
F018 PSE
F019 GTO F017 (loop ad infinitum, or until boredom
F020 LASTx (entry point of iterative sequence subroutine
F021 x<>y
F022 +
F023 LASTx
F024 x<>y
F025 RTN
The machine will stop with 4 in x, waiting for the operator to accept the default, or change it to a higher integer. The largest integer which may be entered (without overflow) is 59. Clear the 4, and place 59 in the x stack position, then press [R/S].
Four and a half seconds later the stack will contain the last four Fibs from the nth and x will hold 956,722,026,041.
Run the program again, this time leaving the default of 4. The stack will hold
t 1
z 1
y 2
x 3
Now, press [R/S] and watch the Fibonacci numbers bump up the stack ad infinitum or boredom... whichever comes first prior to overflow.
Do THAT on your FX115es Plus, I double dare you.
PS It is well known that the ratio of any two consecutive Fibonacci numbers produces a more and more accurate convergence on the number phi:
(SQ(5)+1)/2. This happens accurately (more or less) for the HP35s at about the 29th iteration of the above program. Stop the sequence at the 29th iteration and then press [x<>y] [/] and you should see: 1.61803398875 ~phi more or less!
PSS The program may be interrupted with [R/S] but remember that since the main program never hits a RTN the program counter is stuck in the F program. Inadvertently hitting [R/S] again will restart the program (which you may not want).
To avoid this, when you're done playing, either delete F or press [GTO] [.] [.] to set the program counter to the TOP.
[/php]
Cheers
marcus