## A c++ code for calculating pi value — by random number generation

Attn: Geek world

Finally I am successful in calculating pi value — within less than 0.3% error, by using random number generation. Although my computer needs some fixation on its compiler or path definition etc, there are very good online compilers click to run your c ++ code externally which helps in testing and running c++ codes: try the given link.

### OUTPUT

Computing the value of pi using std::rand() Enter number of trials: 10000 Enter number of random (x,y) points per trial: 10 pi = 3.14376 +- 0.00519107 average - exact = 0.00216735 CPU time = 0.004027 secs

Here is the code I found click to go to Buffalo-university physics website, original link broken by searching a good deal on the web. Yes I did tinker around but only because my own compiler ( Turbo C++ on windows 10, 64 bits ) was throwing some exceptions on the included headers.

### Code

Note probably some of the directives are missing — will fix anon — as soon as I get hold of the folder.

`//This a c++ code that computes the value of pi within a 0.3 % error.`

#include

#include

#include

#include

//#include

using namespace std;

double pi_estimate(const unsigned long points)

{

unsigned long hits = 0;

for (unsigned long i = 0; i < points; i++) {

double x = rand() / (RAND_MAX + 1.0);

double y = rand() / (RAND_MAX + 1.0);

if ( (x - 0.5)*(x - 0.5) + (y - 0.5)*(y - 0.5) < 0.25 )

++hits;

}

return 4 * double(hits) / double(points);

}

void measure_pi(const unsigned long trials,`const unsigned long points,`

double& average, double& std_dev)

{

double sum = 0;

double squared_sum = 0;

for (unsigned long t = 0; t < trials; t++)

{

double pi = pi_estimate(points);

sum += pi;

squared_sum += pi * pi;

}

average = sum / trials;

std_dev = squared_sum / trials - average * average;

std_dev = sqrt(std_dev / (trials - 1));

}

int main()

{

//clrscr();

cout << " Computing the value of pi using std::rand()" << endl;

unsigned long trials, points;

cout trials;

cout points;

clock_t start_time = clock();

double average, std_dev;

measure_pi(trials, points, average, std_dev);

double secs = (clock() - start_time) / double(CLOCKS_PER_SEC);

cout << " pi = " << average << " +- " << std_dev << '\n'

<< " average - exact = " << average - 4*atan(1.0) << '\n'

<< " CPU time = " << secs << " secs" << endl;

//getch();

return 0;

}

Categories: Courses I developed, Information Tech., simulation, Teaching, Technology

## Leave a Reply