Loss of Precision
public class Jtest {
  public static void main (String args []) {
    float x, h, dydx, correct, relError;
    x = 0.1f;
    h = 10.0f;
    correct = (float)Math.cos(x);

    for(int i = 0; i < 15; i ++) {
      dydx = ((float)Math.sin(x + h) - (float)Math.sin(x - h))/ (2.0f * h);
      relError = 100.0f * (dydx - correct)/correct;
      System.out.println("i="+i+" h="+h+" dydx="+dydx+" rel. error="+relError);
      h /= 10.0f;
    }
    System.out.println("Correct value of derivative is: "+correct);
  }
}
i=0  h=10.0         dydx=-0.054130327 rel. error=-105.440216
i=1  h=1.0          dydx=0.83726716   rel. error=-15.8529
i=2  h=0.1          dydx=0.99334663   rel. error=-0.1665868
i=3  h=0.01         dydx=0.9949874    rel. error=-0.0016833
i=4  h=9.999999E-4  dydx=0.9950065    rel. error=2.3362527E-4
i=5  h=9.999999E-5  dydx=0.9949879    rel. error=-0.0016353768
i=6  h=9.999999E-6  dydx=0.99502516   rel. error=0.0021086177
i=7  h=9.999999E-7  dydx=0.9946526    rel. error=-0.035331327
i=8  h=9.999999E-8  dydx=0.9313227    rel. error=-6.400122
i=9  h=9.999999E-9  dydx=0.7450581    rel. error=-25.120102
i=10 h=9.999999E-10 dydx=0.0          rel. error=-100.0
i=11 h=9.999999E-11 dydx=0.0          rel. error=-100.0
i=12 h=9.999999E-12 dydx=0.0          rel. error=-100.0
i=13 h=9.999999E-13 dydx=0.0          rel. error=-100.0
i=14 h=9.999999E-14 dydx=0.0          rel. error=-100.0
Correct value of derivative is: 0.9950042
Lecture 6   Slide 13a   6.837 Fall '01