#include<math.h>
#include<iostream>
using namespace std;

/* Calcul de l'etalement d'un paquet d'ondes */

int main(){
  double a, hbar, t, m, u, Dx, r, rho, Dxdiff;

  // Electron (unites fm, MeV)
  a = 1.e5; hbar = 197.; t = 1.e15 * 3.e8;
  m = 0.511;
  u = 2. * hbar * t / (m * a*a);
  Dx = a/2. * sqrt(1+u*u);
  cout << "Dx(1) electron (fm) : " << Dx << " ; u = " << u << endl;

  // Proton (unites fm, MeV)
  m = 938.;
  u = 2. * hbar * t / (m * a*a);
  Dx = a/2. * sqrt(1+u*u);
  cout << "Dx(1) proton (fm) : " << Dx << " ; u = " << u << endl;

  // Sphere (unites SI)
  a = 1.e-6; hbar = 1.05e-34; t = 1.;
  r = 0.5e-3; rho = 1.e3;
  m = 4./3. * M_PI * r*r*r * rho;
  u = 2. * hbar * t / (m * a*a);
  Dx = a/2. * sqrt(1+u*u);
  cout << "Dx(1) sphere (m) : " << Dx << " ; u = " << u << endl;
  Dxdiff = a/4. * u*u;
  cout << "Dx(1) - Dx(0) : " << Dx-a/2. << " ; Dx(1) - Dx(0) (dev. lim.) : " 
       << Dxdiff << endl;
  return 0;
}
