A C++ logo

A c++ code for calculating pi value.

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 Informationclick 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 Informationclick 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.

A C++ logo
A C++ logo

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;
}

Comments

Leave a comment