Parcourir la source

exemple OAR-array : pi

Philippe Marion il y a 6 ans
Parent
commit
fda3a6d3cb
3 fichiers modifiés avec 61 ajouts et 0 suppressions
  1. 2 0
      .gitignore
  2. 6 0
      usage_avance/OAR_array/Makefile
  3. 53 0
      usage_avance/OAR_array/pi.c

+ 2 - 0
.gitignore

@@ -5,3 +5,5 @@
 #*
 *.out
 *.err
+*.exe
+

+ 6 - 0
usage_avance/OAR_array/Makefile

@@ -0,0 +1,6 @@
+
+all: pi.c 
+	gcc -std=c99 -Wall -o pi.exe pi.c
+
+clean:
+	rm -f pi.exe *.o core.* *~

+ 53 - 0
usage_avance/OAR_array/pi.c

@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+// Approximation de pi par le calcul de l'integrale:  integral(4./(1+x.^2), 0, 1)
+
+// le nombre d'intervalles (entier!) est lu en argument du programme (pour illuster
+//  un exemple de lancement de batch OAR --array sur calculco) 
+
+// Fonction a integrer pour le calcul de pi
+double f(double a) {
+  return 4/(1 + a*a);
+}
+
+int main(int argc, char **argv) {
+  if (argc < 2) // par d'argumenteno arguments were passed
+    {
+      fprintf(stderr, "usage : entrer le nombre d'intervalles en argument, ex: ./pi 10000 .\n");
+      return EXIT_FAILURE;
+    }
+  else
+    {
+
+      //int n=10;
+      // le nombre d'intervalles est lu en argument (entier!)
+      int n=atoi( argv[1] );
+      double Pi_c;
+      // Longueur de l'intervalle d'integration
+      double h = 1.0 / n;
+      
+      Pi_c = 0;
+      for(int i = 0; i<n; i++) {
+	double x = h * (i + 0.5);
+	Pi_c += f(x);
+      }
+      Pi_c = h * Pi_c;
+      
+      //valeur estimee de Pi par arcosinus(-1)
+      double Pi_e = acos(-1);
+      // écart entre les deux valeurs
+      double ecart = fabs(Pi_e - Pi_c);
+      
+      fprintf(stdout, "\n\n"
+	      "   nb d'intervalles     : %d\n"
+	      "   Pi_c                 : %2.10E\n"	 
+	      "  |Pi_e - Pi_calculé|   : %10.4E\n",
+	      n, Pi_c, ecart
+	      );
+      return EXIT_SUCCESS;
+    }
+}
+
+