Skip site navigation (1)Skip section navigation (2)
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>