double code(double x, double eps) {
return cos(x + eps) - cos(x);
}
double code(double x, double eps) {
double tmp;
if (eps <= -1.3830861607967381e-05) {
tmp = (cos(x) * cos(eps)) - (cos(x) + (sin(x) * sin(eps)));
} else if (eps <= 2.3419086364105904e-05) {
tmp = -2.0 * (sin(eps / 2.0) * sin((x + (eps + x)) / 2.0));
} else {
tmp = ((cos(x) * cos(eps)) - (sin(x) * sin(eps))) - cos(x);
}
return tmp;
}



Bits error versus x



Bits error versus eps
Results
if eps < -1.3830861607967381e-5Initial program 31.1
rmApplied cos-sum0.9
Applied associate--l-0.9
Simplified0.9
if -1.3830861607967381e-5 < eps < 2.3419086364105904e-5Initial program 49.6
rmApplied diff-cos37.8
Simplified0.4
if 2.3419086364105904e-5 < eps Initial program 29.8
rmApplied cos-sum1.0
Final simplification0.7
herbie shell --seed 2020338
(FPCore (x eps)
:name "2cos (problem 3.3.5)"
:precision binary64
(- (cos (+ x eps)) (cos x)))