PiEstimator.java
- package org.drip.zen.juice;
- /*
- * 1) Introduce Probability
- * 2) Motivate the Lesson
- * 3) Outline the Approach
- * 4) Write Down the Formula
- * 5) Random Numbers Between -1 and 1
- * 6) Is Inside Circle
- * 7) Count of Inside Circle
- * 8) Probability To PI
- * 9) Generate Random Numbers
- * 10) Bring them all together
- */
- public class PiEstimator {
- static double RandomNumber()
- {
- double random = Math.random();
- double randomBetweenMinus1AndPlus1 = 2. * random - 1;
- return randomBetweenMinus1AndPlus1;
- }
- static boolean IsPointInsideCircle (double x, double y)
- {
- double distanceFromOrigin = Math.sqrt (x * x + y * y);
- boolean insideCircle = false;
- if (distanceFromOrigin < 1.)
- {
- insideCircle = true;
- }
- else
- {
- insideCircle = false;
- }
- return insideCircle;
- }
- static double InsideCircleCount (double[] xArray, double[] yArray)
- {
- double numberInsideCircle = 0.;
- int numberOfPoints = xArray.length;
- for (int counter = 0; counter < numberOfPoints; counter = counter + 1)
- {
- if (IsPointInsideCircle (xArray[counter], yArray[counter]))
- {
- numberInsideCircle = numberInsideCircle + 1;
- }
- }
- return numberInsideCircle;
- }
- static double ProbabilityToPI (double probability)
- {
- double pi = 4. * probability;
- return pi;
- }
- public static void main (String[] input)
- {
- int totalNumberOfPoints = 10000000;
- double[] xPoints = new double[totalNumberOfPoints];
- double[] yPoints = new double[totalNumberOfPoints];
- for (int pointCounter = 0; pointCounter < totalNumberOfPoints; pointCounter = pointCounter + 1)
- {
- xPoints[pointCounter] = RandomNumber();
- yPoints[pointCounter] = RandomNumber();
- }
- double pointsInsideCircle = InsideCircleCount (xPoints, yPoints);
- double probabilityOfPointsInsideCircle = pointsInsideCircle / totalNumberOfPoints;
- double estimatedPI = ProbabilityToPI (probabilityOfPointsInsideCircle);
- System.out.println ("\tNumber of Points Inside Square : " + totalNumberOfPoints);
- System.out.println ("\tNumber of Points Inside Circle : " + pointsInsideCircle);
- System.out.println ("\tProbability Of Points in a Circle : " + probabilityOfPointsInsideCircle);
- System.out.println ("\tEstimated PI : " + estimatedPI);
- System.out.println ("\tActual PI : " + Math.PI);
- }
- }