Algoritmes om pi te bepalen

Uit Wikipedia, de vrije encyclopedie

Er bestaan verscheidene manieren om met behulp van de computer een schatting te maken van de waarde van het getal pi.

Met de door Euler gegeven reeks[bewerken | brontekst bewerken]

Het volgende programma in de programmeertaal C gebruikt een iteratie om de waarde van te berekenen met behulp van de door Euler gegeven reeks:

Het programma laat per miljoen berekende waarden een tussenresultaat zien.

 #include <math.h>
 #include <stdio.h>
 
 #define JUIST 1
 
 int main() {
   long double som = 0;
   long double i = 0;
   long double toon = 0;
 
   while (JUIST) {
     i++; 
     toon++;
     som += 1/(i*i);
     if (toon == 1000000) {
       toon = 0;
       printf("Pi is ongeveer %.50f\n", sqrt(som*6));
     }
   }
   return 0;
 }

Met de formule van Wallis[bewerken | brontekst bewerken]

Dit is een versimpelde variant van de formule van Wallis; iedere twee breuken worden samen genomen.

Deze berekening is niet precies, omdat er na een tijd afronding in de berekening plaatsvindt.

 #include <stdio.h>
 
 int main () {
   unsigned long i = 0;
   double j, pi = 2;
 
   while (1) {
     i += 2;
 
     j = (double) i * i;
     j /= j - 1;
 
     pi *= j;
     printf ("pi: %.20f\n", pi);
   }
 }

Met de formule van Leibniz[bewerken | brontekst bewerken]

Het volgende programma in C berekent de waarde van π steeds nauwkeuriger volgens de formule van Leibniz en laat telkens als er een nauwkeurigere boven- en ondergrens zijn gevonden zien tussen welke 2 waarden π ligt.

 #include <stdio.h>
 
 int main() {
   double pi=4;
   double i;
 
   for(i=3;;i+=4) {
     pi-= (double) 4/i;
     printf("Pi ligt tussen %.50f en ",pi);
     pi+= (double) 4/(i+2);
     printf("%.50f\n",pi);
   }
   return 0;
 }

Met een Monte-Carloreeks[bewerken | brontekst bewerken]

Cirkeloppervlak
Cirkeloppervlak

In een vierkant tekenen we een kwart cirkel met het middelpunt op een hoekpunt, en de straal gelijk aan een zijde. De kans dat een willekeurig punt binnen het vierkant ook binnen de cirkel ligt is ¼π. Zo'n willekeurig punt heeft twee willekeurige coördinaten. Om te kijken of een punt binnen de cirkel ligt vergelijkt het programma, in C, de afstand tot het middelpunt van de cirkel met de straal. Naarmate het aantal gekozen punten groter is, zal de berekening van pi dichter bij de echte waarde liggen.

 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 
 int main () {
   int i, punten, binnen;
   float x, y;
 
   srand(time(NULL));
   printf("Geef het aantal punten: ");
   fflush(stdout);
   scanf("%d", &punten);
   binnen = 0;

   for (i = punten; i > 0; i--) {
     x = (float) rand() / (RAND_MAX + 1.0f);
     y = (float) rand() / (RAND_MAX + 1.0f);
     if (x * x + y * y < 1.0f) {
       binnen++;
     }
   }

   printf ("Pi is ongeveer %f\n", (float) binnen / punten * 4.0f);
 
   return 0;
 }