code: public static double I0(double x) {
          double ans;
          double ax = Math.abs(x);
  
          if (ax < 3.75) {
              double y = x / 3.75;
              y = y * y;
              ans = 1.0 + y * (3.5156229 + y * (3.0899424 + y * (1.2067492
                      + y * (0.2659732 + y * (0.360768e-1 + y * 0.45813e-2)))));
          } else {
              double y = 3.75 / ax;
              ans = (Math.exp(ax) / Math.sqrt(ax)) * (0.39894228 + y * (0.1328592e-1
                      + y * (0.225319e-2 + y * (-0.157565e-2 + y * (0.916281e-2
                      + y * (-0.2057706e-1 + y * (0.2635537e-1 + y * (-0.1647633e-1
                      + y * 0.392377e-2))))))));
          }
  
          return ans;
      }
docs: Bessel function of the first kind, of order 0.
  
  @param x Value.
  @return I0 value.