Algoritmes om pi te bepalen

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

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

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

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

 
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;
 }