Calculating Pi



#8

I stumbled on a neat bit of C code when looking at the PB-2000C (a C-capable calculator, which is weird enough by itself). The code calculates Pi to any number of places. Here's it is...

long a=10000,b,c,d,e,*f,g;
main(){printf("digits?");scanf("%ld",&c);c*=3.5;c-=c%14;f=malloc(4*c+4);
for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}

Compiled and ran it on my machine. I don't understand how it works, but it does. Could anyone with a bit of math skills please comment on what's actually happening here? It looks like magic to me.

Thanks
A


#9

Quote:
It looks like magic to me.

Spigot (http://en.wikipedia.org/wiki/Spigot_algorithm).

Read Pi Unleashed. Ch. 6 for a detailed explanation.

For Unbounded Spigot checkout:
http://www.comlab.ox.ac.uk/oucl/work/jeremy.gibbons/publications/spigot.pdf

A C version of the Unbounded Spigot: http://sense.net/~egan/hpgcc/#Unbounded%20Spigot%20Algorithm


Edited: 3 July 2012, 11:30 a.m.


#10

.... wow.
Thanks!

Edited: 3 July 2012, 4:55 p.m. after one or more responses were posted

#11

Side note - libtommath is in use in the 39gII.

I've never found any good speed comparision between that and other (free/commercial) libraries. Anyone seen one before anywhere?

TW

Edited: 3 July 2012, 3:24 p.m.


#12

I have a fairly comprehensive beta version of a longfloat library written in hpgcc3 for hp50g.
It is user accessible, and it is based on decnumber.
I'm fairly confident it will outpermform similar librarys for any hpcalculator.
Send me a note if you want to give it a try.
Best regards
Gjermund


#13

Quote:
I'm fairly confident it will outpermform similar librarys for any hpcalculator.

Agreed for FP, but not for INT. libtommath is much faster for large integer math. At least based on the comparisons I did years ago.

#14

Hi again,

I agree, there are (much) faster librarys for special purposes.

My library is suitable for floating point evaluation up to about 1000 digits for real and complex values.

It is accessible from user-rpl, you set number of floating point digits, and can directly evaluate expresions like e.g.

'4*ATAN(1)' ->FNUM

100 digits in 0,1s , 200 digits in 0,4s, 500 digits in 4,1s

'SQRT(-2)' ->FNUM

1000 digits in 0,1s, 10000 digits 11,2s

except for basic arithmetic there is a limit of about 1000 DIGITS

Best regards

Gjermund


Possibly Related Threads...
Thread Author Replies Views Last Post
  [OT] Mathematica free for Raspberry PI BruceH 32 1,244 11-23-2013, 05:24 AM
Last Post: Nick_S
  Computing pi with the PC-1300S Kiyoshi Akima 0 128 11-17-2013, 12:24 AM
Last Post: Kiyoshi Akima
  [HP Prime] Calculating Prandtl Number with Units (bug found in USIMPLIFY) Timothy Roche 1 166 11-13-2013, 04:07 PM
Last Post: cyrille de Brébisson
  Calculating Pi LHH 9 426 09-27-2013, 10:50 PM
Last Post: Gerson W. Barbosa
  Visualization of pi Bruce Bergman 13 532 08-17-2013, 05:00 PM
Last Post: Howard Owen
  OT: Happy Pi Day! Eddie W. Shore 13 558 03-22-2013, 10:44 AM
Last Post: Les Koller
  Totally OT ... Pi Day for my car Maximilian Hohmann 18 711 03-10-2013, 01:15 PM
Last Post: chris smith
  [WP34S] A funny bug in Pi (prod) Eduardo Duenez 3 245 01-28-2013, 03:41 AM
Last Post: Walter B
  28S Pi Functionality Matt Fegenbush 3 235 10-17-2012, 02:15 AM
Last Post: Nick_S
  e^pi - pi + 9/10^4 + 1/(10^4*ln(2) + sqrt(10)/6)^2 Gerson W. Barbosa 47 1,701 08-08-2012, 10:58 PM
Last Post: Les Koller

Forum Jump: