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
|