This method is called Monte carlo simulation it is a class of computer algorithm that aggregates data from a random sampling then uses laws of probability to find out some meaningful result from the Data.
The basic idea is simple
1Draw a semicircle with radius r=1.00
2And make a square of side 1 units coinciding with the circle .
3Now randomly (uniformly ) throw some darts onto this arrangement .
4Finally count the number of darts inside the circle(Nin) and total no of darts thrown (Ntot)
now we know from the laws of probability that P(Nin) = area of circular region divided by total area of the square , which comes to be Pi/4=Nin/Ntot
hence Pi can be calculated by Pi = 4*(Nin/Ntot)
How do we implement this in a program ?
1 Assume 2 axes x & y of 1000 units each .
2 Make a circle with origin as the center . and a square as shown earlier
3 Define two variables x and y :
and call for a random value between 0 and 1000 for both of them separately (x,y)
4 Find the distance of this point from the origin if this distance is less than 1000 then the point is inside the circle.
5Count the numbers of inside throws and divide by Total no of throws which was 1000 here multiply this by 4 for the value of PI π
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(void)
{
int throws,cntin=0;
scanf("%d",&throws);
int temp=throws;
while(throws)
{
int a=rand()%1000;
int b=rand()%1000;
int c=(int)(sqrt(a*a+b*b));
if(c<1000)
cntin++;
}
float ans=((4.000*cntin)/temp);
printf("%0.02f \n",ans);
}

or download code from here
But Its more interesting like this , if you like code golfing
#include<namit.h>
#include <stdio.h>
main()
{
long int d = 1;
double p = 1;
for(;;){printf("%.20f\n",(p+=((d1)%4)?(1.0/(d+=2)):1.0/(d+=2))*4);}

No comments:
Post a Comment
Share your thoughts