Pi (π) est une chose mathématique de la vraie beauté. Il apparaît dans de nombreuses équations, notamment dans l'équation de l'aire d'un cercle, p.d.f. d'une distribution normale et enfin, et oh si merveilleusement, dans Identité d'Euler.

Mais comment savons-nous que la valeur de π est 3.14159265359...? Il y a plusieurs façons de calculer pi. Dans ce problème, nous montrons comment le faire en utilisant des fléchettes.

Le nom de ce garçon est aussi Pi. Ce problème ne lui est pas lié (autre que le nom).

Imaginez que vous lanciez des fléchettes sur le cercle jaune à gauche. Si vous lancez au hasard une série de fléchettes sur le jeu de fléchettes, certaines vont atterrir à l'intérieur du cercle jaune et d'autres dans la zone grise à l'extérieur. Si vous comptez à la fois le nombre de fléchettes qui se trouvent à l'intérieur du cercle et le nombre qui se trouve n'importe où dans le carré, le rapport de ces chiffres devrait être proportionnel à l'aire relative des deux figures.

Parce que la zone du cercle est π et celle du carré est 4, la fraction qui tombe à l'intérieur du cercle doit s'approcher π / 4.

Solution

/**
 * Trouver Pi
 * -------------
 * Trouvez la valeur de pi en lançant des fléchettes aléatoires sur un cercle unitaire inscrit dans
 * un carré. La fraction qui atterrit dans le cercle doit être égale à pi / 4.
 */
public class FindPi extends ConsoleProgram {
	
	private RandomGenerator rd = new RandomGenerator();
	
	public void run() {
		int numInCircle = 0;
		int numDarts = 50000000;
		for(int i = 0; i < numDarts; i++) {
			// obtenir un x, y au hasard dans un 2x2
			double x = rd.nextDouble(-1, 1);
			double y = rd.nextDouble(-1, 1);
			// tester si la fléchette a atterri dans le cercle
			double dist = Math.sqrt(x * x + y * y);
			if(dist <= 1) {
				numInCircle++;
			}
		}
		// si nous ne lançons pas en double, ce sera toujours 0.
		double fraction = (double)numInCircle / numDarts;
		double pi = fraction * 4;
		print(pi);
	}
}