C :: Aufgabe #73 :: Lösung #3
3 Lösungen

#73
Berechnen von Pi mit Zufallszahlen
Anfänger - C
von eulerscheZhl
- 07.03.2015 um 07:58 Uhr
Man kann die Kreiszahl Pi näherungsweise bestimmen, indem man Zufallszahlen generiert:
Man stelle sich einen Kreis mit Mittelpunkt (0/0) und Radius 1 vor. Es werden zufällig Punkte erzeugt, bei denen sowohl x als auch y im Intervall [0;1[ liegen. Dann wird die Entfernung dieser Punkte zum Ursprung ermittelt. Ist diese Entfernung kleiner als 1, so liegt der Punkt innerhalb des Kreises.
Setzt man bei einer ausreichenden Zahl von Zufallspunkten die Zahl der Treffer in das richtigen Verhältnis zur Gesamtzahl der Punkte, so erhält man einen Näherungswert für Pi (Pi = 4 * AnzahlTreffer / AnzahlGesamt).
Schreibe ein Programm, das auf oben beschriebene Weise Pi berechnet.
Man stelle sich einen Kreis mit Mittelpunkt (0/0) und Radius 1 vor. Es werden zufällig Punkte erzeugt, bei denen sowohl x als auch y im Intervall [0;1[ liegen. Dann wird die Entfernung dieser Punkte zum Ursprung ermittelt. Ist diese Entfernung kleiner als 1, so liegt der Punkt innerhalb des Kreises.
Setzt man bei einer ausreichenden Zahl von Zufallspunkten die Zahl der Treffer in das richtigen Verhältnis zur Gesamtzahl der Punkte, so erhält man einen Näherungswert für Pi (Pi = 4 * AnzahlTreffer / AnzahlGesamt).
Schreibe ein Programm, das auf oben beschriebene Weise Pi berechnet.
#3

von devnull (8870 Punkte)
- 13.03.2015 um 08:24 Uhr
Radius-Berechnung mit Integer-Werten.
C-Code

/************************************** * pimcu.c PI mit Monte Carlo Methode * Berechnung mit "unsigned int" ***************************************/ #include <stdlib.h> #include <stdio.h> #include <time.h> #include <math.h> #define NRSHOTS 10000000 int main( int argc, char **argv ) { uint shots, cc, cs; uint x, y; // read from stdin or use default shots = (argc>1)?atoi(argv[1]):NRSHOTS; // seeding random number generator srand(time(NULL)); // shooting loop for (cc=cs=0; cs < shots; cs++) { x = (uint)rand(); y = (uint)rand(); if ((ulong)x*x + (ulong)y*y < (ulong)RAND_MAX*RAND_MAX) cc++; } printf("PI Monte Carlo : %.8f\n", 4.0*cc/cs); printf("PI aus math.h : %.8f\n", M_PI); return 0; }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1