# Annäherung an Pi



## Leon1998 (28. Okt 2015)

Hallo!

Ich bräuchte Hilfe bei folgender Aufgabe:
1. Wie lässt sich mathematisch begründen, dass output sich in diesem Algorithmus an Pi annähert? Wie heißt der Algorithmus und wofür wird er verwendet?

public class Test {
public static void main(String[] args){
int g = 10000;
int v = 0;
double x,y;
double output;
for (int i = 1; i<= g; i++)    {
x = Math.random();
y = Math.random();
if (Math.hypot(x,y) <= 1)
v++;​}
output = 4*(double)v / g;
System.out.printf("Output: %g%n", output);
System.out.println(v);​}​}

2. Wir wollen die Abbruchbedingung in der for-Schleife nun verändern und nicht eine bestimmte Anzahl an Iterationen betrachten, sondern das Ergebnis auf eine bestimmte Genauigkeit (0.000001) annähern. Wie sieht der neue Quellcode aus?


----------



## Dompteur (29. Okt 2015)

ad 1) Das sieht für mich wie die Monte-Carlo-Methode aus.
Dabei hast du einen Einheitskreis (Kreis mit Radius = 1) und das umschließende Quadrat (Seitenlänge = 2).
Die Fläche des Quadrats ist leicht berechenbar -> 2*2 = 4
Die Fläche des Kreises ist PI.
Die Methode wählt dann zufällige Zahlen innerhalb des Quadrats und ermittelt, ob der Wert innerhalb oder außerhalb des Kreises liegt.
Aus dem Verhältnis der Punkte innerhalb des Kreises und aller versuchten Punkte kann PI errechnet werden.

ad 2)
Dazu musst du dir den letzten output-Wert merken.
Die Abbruchbedingung ist erfüllt, wenn der Absolutwert der Differenz von output_alt und output_neu kleiner als deine vorgegebene Genauigkeit ist.
Damit das System nicht entartet, darfst du aber solange nicht abbrechen, solange dein output-Wert 0 oder 4 ist. Dies kann während der ersten paar Durchläufe der Fall sein.


----------



## Leon1998 (29. Okt 2015)

Alles klar, dankeschön!


----------

