Date: Tue, 09 Nov 2010 01:09:46 -0800 From: perryh@pluto.rain.com To: smithi@nimnet.asn.au Cc: freebsd-questions@freebsd.org, gnrp@physik.tu-berlin.de Subject: Re: how to generate pi in c Message-ID: <4cd90fda.M0ZCOlvxcAzTnwuw%perryh@pluto.rain.com> In-Reply-To: <20101108182717.M66572@sola.nimnet.asn.au> References: <20101106120033.CB14610656D7@hub.freebsd.org> <20101108182717.M66572@sola.nimnet.asn.au>
next in thread | previous in thread | raw e-mail | index | archive | help
Ian Smith <smithi@nimnet.asn.au> wrote: > In freebsd-questions Digest, Vol 335, Issue 11, Message: 4 > On Sat, 06 Nov 2010 01:00:34 -0700 perryh@pluto.rain.com wrote: > > 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; > > Surely that should be 'pi = 4 * counter / max;' otherwise even if the > integer counter were only 1 (of 100000000), pi would already be 4 :) The part I snipped out included a note that it was only generating the digits, not trying to show the decimal point placed properly. With that understanding, and as long as max is a (large-ish) power of 10, the division is not needed. (If the division were to be inserted, at least one of its operands would need to be cast to double, or pi would likely be reported as 3.0000 due to truncation.) An approach more in keeping with the original would involve using sprintf, and then inserting the decimal point into the resulting string :)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4cd90fda.M0ZCOlvxcAzTnwuw%perryh>