#include<iostream>
#include<iomanip>
#include<math.h>
using namespace std;

/* Integration : fonction de repartition */

double fonction(double t){
  return exp(-t*t/2.) / sqrt(2.*M_PI);
}

double integration(double x, int n){
  int i;
  double h, s;

  h = x/n;
  s = 0.;
  for (i = 1; i <= n; i++)
    s += fonction(h*(i-0.5));
  return h*s;
}

double integr_ajust(double x, int n0, double eps){
  int n;
  double res, resp, d;

  resp = integration(x,n0);
  n = n0;
  do {
    n = 2*n;
    res = integration(x,n);
    d = fabs((res-resp)/resp);
    resp = res;
  } while (d > eps);
  cout << "Nombre initial de rectangles : " << n0 << endl;
  cout << "Nombre final de rectangles : " << n << endl;
  return res;
}

int main(){
  int n0;
  double x, eps;

  n0 = 1;
  eps = 1.e-12;
  cout << "Valeur de x ? ";
  cin >> x;
  cout << setprecision(15);
  cout << "Valeur de l'integrale sans ajustement: "
       << 0.5 + integration(x,n0) << endl;
  cout << "Valeur de l'integrale avec ajustement: "
       << 0.5 + integr_ajust(x,n0,eps) << endl;
  return 0;
}
