//                 __
// But : calcul de || par la methode des rectangles (point milieu).
//
// /1
// |     4           __
// | ---------- dx = ||
// | 1 + x**2
// 
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <sys/time.h>
#include <unistd.h> 

// pour windows
//double get_time(){ return ((double) clock())/CLOCKS_PER_SEC;}


//pour linux
double get_time() {  
       struct timeval tv;  
       gettimeofday(&tv, (void *)0);  
       return (double) tv.tv_sec + tv.tv_usec*1e-6;
}

double calcul_pi_parallele(int nb_threads, int N){  
       double start,stop;  
       double cpu_time_used; 
       int i = 0;  
       double valeur_pi = 0.0;  
       double sommeFX = 0.0;  
       double X;  
       double h = 1.0 / (double)N; // pas d'integration
       start = 	get_time();   
       for(i = 1; i < N; i++) {    
             X = h * (i - 0.5);    
             sommeFX += 4.0/(1.0 + X*X);  
       }  
       valeur_pi= h * sommeFX; 
       stop = get_time();
       cpu_time_used = stop - start;		 
       printf("Valeur de pi %1.12f\n",valeur_pi);     
       return cpu_time_used;
}
             
int main(int argc, char **argv){     
    int nb;  
    double t=0.0;  
    printf("Nb.threads\tTps.\n");  
    for(nb=1;nb<=12;nb++){     
      t = calcul_pi_parallele(nb, 1000000000);    
      printf("%d \t %f\n ",nb,t);  
    }  
    //system("PAUSE"); 
    return(EXIT_SUCCESS);
}  
