pi.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. // Approximation de pi par le calcul de l'integrale: integral(4./(1+x.^2), 0, 1)
  5. // le nombre d'intervalles (entier!) est lu en argument du programme (pour illuster
  6. // un exemple de lancement de batch OAR --array sur calculco)
  7. // Fonction a integrer pour le calcul de pi
  8. double f(double a) {
  9. return 4/(1 + a*a);
  10. }
  11. int main(int argc, char **argv) {
  12. if (argc < 2) // par d'argumenteno arguments were passed
  13. {
  14. fprintf(stderr, "usage : entrer le nombre d'intervalles en argument, ex: ./pi 10000 .\n");
  15. return EXIT_FAILURE;
  16. }
  17. else
  18. {
  19. //int n=10;
  20. // le nombre d'intervalles est lu en argument (entier!)
  21. int n=atoi( argv[1] );
  22. double Pi_c;
  23. // Longueur de l'intervalle d'integration
  24. double h = 1.0 / n;
  25. Pi_c = 0;
  26. for(int i = 0; i<n; i++) {
  27. double x = h * (i + 0.5);
  28. Pi_c += f(x);
  29. }
  30. Pi_c = h * Pi_c;
  31. //valeur estimee de Pi par arcosinus(-1)
  32. double Pi_e = acos(-1);
  33. // écart entre les deux valeurs
  34. double ecart = fabs(Pi_e - Pi_c);
  35. fprintf(stdout, "\n\n"
  36. " nb d'intervalles : %d\n"
  37. " Pi_c : %2.10E\n"
  38. " |Pi_e - Pi_calculé| : %10.4E\n",
  39. n, Pi_c, ecart
  40. );
  41. return EXIT_SUCCESS;
  42. }
  43. }