02-07-2020, 10:55 PM
Last week my cousin told me Wallis' product was quite his favorite formula in mathematics.
[attachment=8075]
I remembered the thread opened on this forum about PI approximations (like 355 / 113), and we decided to program Wallis product on Free42 while having a coffee...
We built it this way:
The usage is simple:
- initiate n with value 0 in register 00: 0 STO 00
- then initiate product with value 1 in register 01: 1 STO 01
- execute the product as many times as you want: XEQ WALLIS
We were really disapointed!
First iteration: 2.6666...
2nd: 2.844444...
3rd: 2.9...
10th: 3.067...
50th: 3.126...
Yes the product seems to approach PI/2, but soooooo slowly!
My other program included a loop until the precision of the calculator has been reached:
I tried it a few times and breaked the program after several minutes to get 7 correct significant digits of pi after... 100E6 iterations.
Despite the fact that Wallis' product is really slow (and it's very deceptive), I have one question:
What do you think about calculations precisions?
- I mean, at first iteration the number is rounded, because pi/2 is approximated by 1.3333.... so errors will appear, and will be multiplied at each loop. I even wondered if those approximations could be a reason for the convergence being so slow.
- I also mean, each time we iterate, we calculate a square of big numbers, approaching the limit of the calculator, leading to (4n^2) = (4n^2 - 1) => (4n^2)/(4n^2 - 1) = 1, but, unless my algorithm is wrong, I did not reach the limit.
[attachment=8075]
I remembered the thread opened on this forum about PI approximations (like 355 / 113), and we decided to program Wallis product on Free42 while having a coffee...
We built it this way:
Code:
01 LBL "WALLIS"
02 1
03 STO+ 00 // n++ (n is register 00)
04 RCL 00 // recl n
05 X^2 // this is n^2
06 4
07 x // 4n^2 (numerator)
08 ENTER // duplicate
09 X<>Y // enable stack lift
10 1
11 - // 4n^2 - 1 (denominator)
12 / // 4n^2 / (4n^2 - 1)
13 STOx 01 // pi/2 approximation is in register 01
14 RCL 01
15 2
16 x // (pi/2 approximation) x 2
17 RTN
The usage is simple:
- initiate n with value 0 in register 00: 0 STO 00
- then initiate product with value 1 in register 01: 1 STO 01
- execute the product as many times as you want: XEQ WALLIS
We were really disapointed!
First iteration: 2.6666...
2nd: 2.844444...
3rd: 2.9...
10th: 3.067...
50th: 3.126...
Yes the product seems to approach PI/2, but soooooo slowly!
My other program included a loop until the precision of the calculator has been reached:
Code:
01 LBL "PICALC"
02 RCL 01 // take last PI/2 approximation...
03 STO 02 // ... and save it
04 1
05 STO+ 00 // n++ (n is register 00)
06 RCL 00 // recl n
07 X^2 // this is n^2
08 4
09 x // 4n^2 (numerator)
10 ENTER // duplicate
11 X<>Y // enable stack lift
12 1
13 - // 4n^2 - 1 (denominator)
14 / // 4n^2 / (4n^2 - 1)
15 STOx 01 // pi/2 approximation is in register 01
16 RCL 01 // recl pi/2 current approximation
17 RCL 02 // recl pi/2 previous approximation
18 -
19 X≠0? // if maximum calculator precision has not been reached then...
20 GTO "PICALC" // ... loop and calculate another one
21 RCL 01 // we're done, prove it
22 2
23 x // by calculating 2 x pi/2 approximation
24 RTN
I tried it a few times and breaked the program after several minutes to get 7 correct significant digits of pi after... 100E6 iterations.
Despite the fact that Wallis' product is really slow (and it's very deceptive), I have one question:
What do you think about calculations precisions?
- I mean, at first iteration the number is rounded, because pi/2 is approximated by 1.3333.... so errors will appear, and will be multiplied at each loop. I even wondered if those approximations could be a reason for the convergence being so slow.
- I also mean, each time we iterate, we calculate a square of big numbers, approaching the limit of the calculator, leading to (4n^2) = (4n^2 - 1) => (4n^2)/(4n^2 - 1) = 1, but, unless my algorithm is wrong, I did not reach the limit.