    /* exp.java  - compute e(x) */
    
    
public class exp1
{
    static public double compute_e()
    {
      double n, nf,  result, term, eps;
    
     result = 1;
     nf = 1.0;
     n = 1.0;
     eps = 0.000000000000000001;
     
     do {
         term = 1.0/nf;
         result += term;
         n = n + 1.0;
         nf = nf * n;
        } while (term > eps);
    
      return result;
    
    } /* compute_e */
    
    static public double my_exp( double x,  double eps,  double e)
    {
      double n, nf, xp, result, term,  ek;
      int k; 
    
     k = (int)x;
     x = x - k; 
     ek = 1.0;
     for (; k > 0; k--)
        ek = ek * e;
    
          
     x = x - k; 
     System.out.println("ek = " + ek + ", k = " + k + ", x = " + x);
    
     result = 1.0;
     xp = x;
     nf = 1.0;
     n = 1.0;
    
     do {
         term = xp/nf;
         result += term;
         xp = xp*x;
         n = n + 1.0;
         nf = nf * n;
        } while (term > eps);
    
      result = ek* result;
      return result;
    }  /* exp */
    
    public static void main(String args[])
    {
      double sqr_root_e, lib_value, e;
    
      e = compute_e();
    
      System.out.println("e = " + e);
      System.out.println("lib e = " + Math.exp(1));
    
      sqr_root_e = my_exp(3.7, 0.000000000001, e);
      lib_value = Math.exp(3.7);
    
      System.out.println("Our value = " + sqr_root_e+" , Lib value = " +
                                    lib_value);
     
    
    } /* main */
    
} // exp1
