\sin \left(x + \varepsilon\right) - \sin x
\left(\log \left(e^{\sin x \cdot \left(\cos \varepsilon - 1\right)}\right) + \cos x \cdot \sin \varepsilon\right) + \mathsf{fma}\left(-\sin x, 1, \sin x\right)double f(double x, double eps) {
double r110075 = x;
double r110076 = eps;
double r110077 = r110075 + r110076;
double r110078 = sin(r110077);
double r110079 = sin(r110075);
double r110080 = r110078 - r110079;
return r110080;
}
double f(double x, double eps) {
double r110081 = x;
double r110082 = sin(r110081);
double r110083 = eps;
double r110084 = cos(r110083);
double r110085 = 1.0;
double r110086 = r110084 - r110085;
double r110087 = r110082 * r110086;
double r110088 = exp(r110087);
double r110089 = log(r110088);
double r110090 = cos(r110081);
double r110091 = sin(r110083);
double r110092 = r110090 * r110091;
double r110093 = r110089 + r110092;
double r110094 = -r110082;
double r110095 = fma(r110094, r110085, r110082);
double r110096 = r110093 + r110095;
return r110096;
}




Bits error versus x




Bits error versus eps
| Original | 37.6 |
|---|---|
| Target | 15.4 |
| Herbie | 0.5 |
Initial program 37.6
rmApplied sin-sum22.1
rmApplied add-cube-cbrt22.6
Applied add-sqr-sqrt44.1
Applied prod-diff44.1
Simplified22.4
Simplified0.4
rmApplied fma-udef0.4
rmApplied add-log-exp0.5
Final simplification0.5
herbie shell --seed 2020025 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:precision binary64
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))