Π day
|
03-15-2022, 07:55 PM
Post: #21
|
|||
|
|||
RE: π day
(03-15-2022 04:56 PM)robve Wrote: So I am not sure if this is the best choice of parameterization for this particular alternating series. I only used what I wrote in the linked post, which was copied verbatim from Valentin's article. But I agree with you. This series is not slowly converging like this one. Therefore it's probably not that easy to decide if any form of acceleration is worth the effort. That's why I gave an alternative solution for the HP-42S. (03-15-2022 12:35 AM)robve Wrote: In addition, I observed that summing the terms in reverse order may sometimes improve accuracy. That's the point of Wirth's exercise. (03-15-2022 12:35 AM)robve Wrote: That's far more CPU power than the N=17 steps for the Sharp series to converge to 10 decimal places. If you really care about CPU cycles you may want to avoid the expensive \(3^n\) calculation which usually uses \(\log\) and \(\exp\) under the hood. For integer exponents this can be done more efficiently. But I don't know if that is used by your Sharp calculator. This can be achieved by rearranging the series like so: \( \begin{align} 1-{\frac {1}{3\cdot 3}}+{\frac {1}{5\cdot 3^{2}}}-{\frac {1}{7\cdot 3^{3}}}+\cdots = 1 - \frac{\frac{1}{3}-\frac{\frac{1}{5}-\frac{\frac{1}{7}-\frac{\frac{1}{9}-\cdots}{3}}{3}}{3}}{3} \end{align} \) The calculation starts from inside out or rather top down like this: Code: def madhava(n): Cheers Thomas Quote:"I can count on my friends"Is this count your friend? |
|||
03-15-2022, 08:49 PM
(This post was last modified: 03-16-2022 03:15 AM by robve.)
Post: #22
|
|||
|
|||
RE: Π day
(03-15-2022 07:55 PM)Thomas Klemm Wrote:(03-15-2022 12:35 AM)robve Wrote: In addition, I observed that summing the terms in reverse order may sometimes improve accuracy.That's the point of Wirth's exercise. Good point. I tried to convey this subtly as a minor contribution to that other thread by just restating a known fact that summing a series with monotonically decreasing magnitude should always be performed in reverse. It's easy to see why when you look at floating point addition that right shifts the mantissa of one of the operands until the exponents align. You want to start with the smallest terms, those who's exponents align most closely to the (initially) small sum. (03-15-2022 07:55 PM)Thomas Klemm Wrote:(03-15-2022 12:35 AM)robve Wrote: That's far more CPU power than the N=17 steps for the Sharp series to converge to 10 decimal places. To clarify, a better way is to perform full "strength reduction" as compilers do to optimize loops. Even better, for equidistant grids in one or more dimensions, functions can be more effectively optimized using the Chains of recurrences algebra, see https://dl.acm.org/doi/abs/10.1145/19034...NSgF9Z3eNA and our article https://dl.acm.org/doi/abs/10.1145/13755...aRdGHFiMLQ (our earlier work on the inverse CR algebra is used by the popular GCC compiler to optimize loops.) After strength reduction we end up with one division, two multiplications, two additions and one negation per loop iteration: S=0 P=1 X=1 Y=1 FOR I=0 TO N S=S+P/(X*Y) P=-P X=X*3 Y=Y+2 NEXT I Note that the first iteration can be stripped: S=1 P=-1 X=3 Y=3 FOR I=1 TO N S=S+P/(X*Y) P=-P X=X*3 Y=Y+2 NEXT I and "operator strength reduction" then gives: S=1 P=-1 X=3 Y=3 FOR I=1 TO N S=S+P/(X*Y) P=-P X=X+X+X Y=Y+2 NEXT I However, and this is an important point, there is a limit to how aggressive we can be with strength reduction (via Chains of Recurrences) to optimize floating point operations, because of potentially introducing small errors that accumulate over large grids (not a problem when N is small). See https://dl.acm.org/doi/abs/10.1145/38410...6bSQ-bA_eg Error accumulation is not a problem for whole numbers, so \( 3^i \) is always safe to optimize as shown above. PS. Division is typically the most expensive operation, which should be avoided at all cost, when possible. PPS. Summing terms in the order of increasing magnitude can be important, but methods such as Kahan summation work generally best. Also binary tree summation is generally better (the proof is in my lecture notes on parallel computing). - Rob "I count on old friends to remain rational" |
|||
03-17-2022, 03:40 AM
Post: #23
|
|||
|
|||
RE: Π day | |||
03-17-2022, 03:54 AM
Post: #24
|
|||
|
|||
RE: Π day
(03-14-2022 03:35 AM)robve Wrote: What's your favorite pi series? Not a series but I like Vieta's Formula for Pi since only 2 is used: \( \begin{align} \pi = 2 \times \frac{2}{\sqrt{2}} \times \frac{2}{\sqrt{2 + \sqrt{2}}} \times \frac{2}{\sqrt{2 + \sqrt{2 + \sqrt{2}}}} \times \frac{2}{\sqrt{2 + \sqrt{2 + \sqrt{2 + \sqrt{2}}}}} \times \cdots \end{align} \) Code: 00 { 30-Byte Prgm } R00=2.82842712475 x: 1.41421356237 R00=3.06146745892 x: 1.84775906502 R00=3.12144515226 x: 1.96157056081 R00=3.13654849055 x: 1.99036945334 R00=3.14033115695 x: 1.99759091241 R00=3.14127725093 x: 1.99939763739 R00=3.14151380114 x: 1.99984940368 R00=3.14157294037 x: 1.99996235057 R00=3.14158772528 x: 1.99999058762 R00=3.14159142151 x: 1.99999764690 R00=3.14159234557 x: 1.99999941173 R00=3.14159257658 x: 1.99999985293 R00=3.14159263434 x: 1.99999996323 R00=3.14159264878 x: 1.99999999081 R00=3.14159265239 x: 1.99999999770 R00=3.14159265329 x: 1.99999999943 R00=3.14159265351 x: 1.99999999986 R00=3.14159265357 x: 1.99999999996 R00=3.14159265359 x: 1.99999999999 R00=3.14159265359 x: 2.00000000000 |
|||
03-17-2022, 11:39 AM
(This post was last modified: 03-17-2022 12:18 PM by Gerson W. Barbosa.)
Post: #25
|
|||
|
|||
RE: Π day
(03-17-2022 03:54 AM)Thomas Klemm Wrote: We can save at least one byte, one step and one register by using Katie Wasserman’s idea here: Code:
|
|||
03-17-2022, 12:29 PM
Post: #26
|
|||
|
|||
RE: Π day
(03-17-2022 11:39 AM)Gerson W. Barbosa Wrote: We can save at least two bytes (…) Another byte beats the dust: Code: 00 { 26-Byte Prgm } I also removed the check because the VIEW command stops when flag 21 is set. Thus I simply hit the R/S button as long as I want. Just noticed your edit: I don't think that the RCL X command is needed. |
|||
03-17-2022, 02:10 PM
(This post was last modified: 03-17-2022 02:31 PM by Gerson W. Barbosa.)
Post: #27
|
|||
|
|||
RE: Π day
Thomas Klemm dateline=' Wrote: I also removed the check because the VIEW command stops when flag 21 is set. I’d replaced RCL X with ENTER. It worked once only because there was a 2 on the stack I hadn’t noticed. Then I went back to the initial version. But you’re right, better use the R/S to stop, that’s what that key is for. —— PS.: RCL X is necessary. Try running the program after clearing the stack. |
|||
03-17-2022, 08:25 PM
Post: #28
|
|||
|
|||
RE: Π day
Back in March of 2004, Olivier De Smet posted this fairly compact RPL version of a pi digits program (see post #17):
Code: %%HP: T(3)A(R)F(.); It uses exact integers for intermediate computations, thus providing digit counts in excess of the inherent approximate limitations. He attributed it as an RPL translation of a program originally posted by Katie Wasserman which was written for the HP 32SII. Katie, in turn, cited the algorithm as essentially being the Euler/Machin approach (Pi = 20 * arctan(1/7) + 8 * arctan(3/79)). As soon as I saw Olivier's version some time last year, I wanted to try a SysRPL implementation based on his code that would avoid the inherent performance penalty of IQUOT. This seemed like a good time to try it. This is essentially Olivier's program, but coded in SysRPL and providing a result rounded to the specified number of digits (Olivier's provides 6 additional digits). The code will compile on a 49g+/50g with the standard HP extable installed (use 256.06 MENU ASM). I've used some DCs and DEFINEs to simplify the code listing a bit. Code: !NO CODE Performance improved, as expected. Generating 1000 digits with Olivier's original RPL program takes about 231 seconds (you actually get 1006 digits, but the last 4 are not accurate). Generating 1006 digits using the SysRPL version takes about 111 seconds, and all resulting digits appear to be correct (at least they match Wolfram Alpha's output for 1006 digits). The usual advantages of SysRPL apply here, but a significant part of the improvement is in bypassing the overhead of IQUOT and going straight to the internal exact integer division code. I'm sure NewRPL on the 50g and Python on the Prime would perform much better, but I thought this was reasonable performance for the task at hand on the original 50g platform. |
|||
03-18-2022, 01:04 AM
Post: #29
|
|||
|
|||
RE: Π day
(03-17-2022 03:40 AM)Thomas Klemm Wrote:(03-15-2022 08:49 PM)robve Wrote: functions can be more effectively optimized using the Chains of recurrences algebraThat sounds interesting. This link shows related articles on this subject, including PDFs: https://scholar.google.com/scholar?q=rel...as_sdt=0,6 - Rob "I count on old friends to remain rational" |
|||
03-18-2022, 03:06 AM
Post: #30
|
|||
|
|||
RE: Π day
Back before we had a calculator with a Pi key (let alone programmability), we used the old standby 355 / 113. It gives a fairly decent approximation (to at least 5 digits) and can be handily entered on a four-banger calculator.
On the other hand, it was pretty straightforward to memorize pi out to about 8 digits of precision. |
|||
03-18-2022, 04:31 AM
Post: #31
|
|||
|
|||
RE: Π day
(03-18-2022 03:06 AM)Xorand Wrote: Back before we had a calculator with a Pi key (let alone programmability), we used the old standby 355 / 113. It gives a fairly decent approximation (to at least 5 digits) and can be handily entered on a four-banger calculator. Those with Sinclair Scientific calculators didn’t need a Pi key (there was not enough ROM available to store it anyway) or need to memorize the value. It was printed on the front of the calculator. Of course it was only shown to 5 decimal places which was generally more accurate than the calculator. If you haven’t seen it be sure to check out Ken Shirriff’s blog post on reverse Engineering this model. http://files.righto.com/calculator/sincl...lator.html |
|||
03-18-2022, 09:07 AM
(This post was last modified: 03-18-2022 09:12 AM by Ángel Martin.)
Post: #32
|
|||
|
|||
RE: Π day
(03-17-2022 02:10 PM)Gerson W. Barbosa Wrote:Thomas Klemm dateline=' Wrote: I also removed the check because the VIEW command stops when flag 21 is set. You guys have come up with the perfect VIETA User code, so there's no point for my trying to improve on it... so here comes an MCODE version instead. In manual mode (not running a program) it will display the values afforded by the successive iterations, so you'll see the progress being made... Will be included in the PIE_ROM as well. Cheers, ÁM "To live or die by your own sword one must first learn to wield it aptly." |
|||
03-18-2022, 10:48 AM
Post: #33
|
|||
|
|||
RE: Π day
This discussion reminds me about an article from NASA's JPL. It explains that only 15 decimals of pi are really needed to calculate the circumference of the orbit of a distance where Voyager (in 2016) is down to an error of about 1.5 inch.
https://www.jpl.nasa.gov/edu/news/2016/3...ally-need/ Regards, Meindert |
|||
03-18-2022, 11:04 AM
Post: #34
|
|||
|
|||
RE: Π day
(03-18-2022 10:48 AM)MeindertKuipers Wrote: This discussion reminds me about an article from NASA's JPL. It explains that only 15 decimals of pi are really needed to calculate the circumference of the orbit of a distance where Voyager (in 2016) is down to an error of about 1.5 inch. Very nice, a real down-to-earth (pun intended) perspective on the issue! Of course that doesn't preclude us from attempting math explorations, never mind their actual usefulness in the engineering world, though. "To live or die by your own sword one must first learn to wield it aptly." |
|||
03-19-2022, 09:45 AM
Post: #35
|
|||
|
|||
RE: Π day
(03-18-2022 09:07 AM)Ángel Martin Wrote: You guys have come up with the perfect VIETA User code, so there's no point for my trying to improve on it... so here comes an MCODE version instead. Hi Ángel, Your MCODE needs Library 4 to work properly, right? After doing some iterations it stops. After pressing R/S it asks 'RadIUS'. Enter '1' and you get a 'Pi' that isn't different from the key-bound Pi. Great achievement! Thanks! |
|||
03-19-2022, 11:17 AM
(This post was last modified: 03-19-2022 11:33 AM by Ángel Martin.)
Post: #36
|
|||
|
|||
RE: Π day
(03-19-2022 09:45 AM)Frido Bohn Wrote: Hi Ángel, Hi Frido, yes it does to present the "RUNNING..." message - sorry about that but it's kind of my standard these days/ - and as part of the PIE ROM (forthcoming) this is a worth-having dependency for may other reasons as well. I have no idea about those strange prompts/questions you're getting, the VIETA function does not prompt for any parameter at all. It'ss likely that when you press R/S the calculator defaults to your current FOCAL program in memory, which is generating the prompts... Best, ÁM "To live or die by your own sword one must first learn to wield it aptly." |
|||
03-19-2022, 11:18 AM
(This post was last modified: 03-19-2022 11:23 AM by Ángel Martin.)
Post: #37
|
|||
|
|||
RE: Π day
Heresy or new truth?
Here's an interesting reading for y'all: https://www.theverge.com/tldr/2018/3/14/...iday-truth "To live or die by your own sword one must first learn to wield it aptly." |
|||
03-19-2022, 01:01 PM
Post: #38
|
|||
|
|||
RE: Π day
(03-19-2022 11:17 AM)Ángel Martin Wrote: I have no idea about those strange prompts/questions you're getting, the VIETA function does not prompt for any parameter at all. It'ss likely that when you press R/S the calculator defaults to your current FOCAL program in memory, which is generating the prompts... Hi Ángel, You are right, the R/S instruction indeed jumps into the current FOCAL program step. Just by coincidence it had to do something with Pi. Sorry for the confusion. KR Frido |
|||
03-19-2022, 03:13 PM
Post: #39
|
|||
|
|||
RE: Π day
(03-18-2022 09:07 AM)Ángel Martin Wrote: You guys have come up with the perfect VIETA User code, so there's no point for my trying to improve on it... so here comes an MCODE version instead. Hi Ángel, The first 3 instructions of your code (391, 08C, 079) point to Address 879 of the same port where a routine 'INITLZ' is apparently located. Of course, by simply copying the 'Vieta' MCODE into my ROM the program runs into nirvana. I will wait for the PIE_ROM then. KR Frido |
|||
03-20-2022, 07:39 AM
(This post was last modified: 03-20-2022 07:40 AM by Ángel Martin.)
Post: #40
|
|||
|
|||
RE: Π day
Sorry about that, here's the missing code in the [INTZL] routine:
Code: INITLZ A879 18C ?FSET 11 The call to 0x4FAA you can simply remove, it's a cosmetic effect to show "RUNNING..." in the LCD but can be left out without any problems. "To live or die by your own sword one must first learn to wield it aptly." |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 3 Guest(s)