Date: Sat, 06 Nov 2010 01:00:34 -0700 From: perryh@pluto.rain.com To: gnrp@physik.tu-berlin.de Cc: freebsd-questions@freebsd.org Subject: Re: how to generate pi in c Message-ID: <4cd50b22.r80gL0SMmLLFy03t%perryh@pluto.rain.com> In-Reply-To: <20101105195019.4462c479@adolfputzen> References: <AANLkTikaBYi0d4dvLnc=vxuPDWQHDqrVJrz=iVkECeO=@mail.gmail.com> <20101105195019.4462c479@adolfputzen>
next in thread | previous in thread | raw e-mail | index | archive | help
Julian Fagir <gnrp@physik.tu-berlin.de> wrote: > > Does anyone has a "generate-pi.c" source code? ... > 1 #include <stdlib.h> > 2 #include <string.h> > 3 #include <stdio.h> > 4 > 5 // Change this for a more accurate result. > 6 long max = 100000000; > 7 double a, b; > 8 double pi; > 9 long counter; > 10 long i; > 11 > 12 int main() { > 13 for (i = 0; i< max; i++) { > 14 a = drand48(); > 15 b = drand48(); > 16 if (a*a + b*b <= 1) > 17 counter++; > 18 } > 19 pi = 4*counter; > 20 > 21 printf("%e\n", pi); > 22 return(0); > 23 } ... > This approximation is stupid ... Just take 'random' numbers and > look whether they are in a circle (that's the a*a + b*b <= 1). Not stupid, clever. Very clever. I rather doubt it resembles what the OP had in mind, but it is a brilliant example of what can be accomplished when one casts aside any perceived need to adopt a conventional approach. > The detail of this approximation heavily depends on the pseudo-rng > you are using, as does its correctness Perhaps it would be useful in a PRNG test suite? > (e.g., when your 'rng' always returns 10, pi would be computed to > be 10) ... Bad example. If abs(drand48()) always exceeded (0.5 * sqrt(2.0)), a*a + b*b would always exceed 1.0, thus counter would never be incremented and pi would be reported as zero.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4cd50b22.r80gL0SMmLLFy03t%perryh>