\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \cos \varepsilon - 1, \left(\sqrt[3]{\cos x} \cdot \sqrt[3]{\cos x}\right) \cdot \left(\sqrt[3]{\cos x} \cdot \sin \varepsilon\right)\right) + \mathsf{fma}\left(-\sin x, 1, \sin x\right)double f(double x, double eps) {
double r129182 = x;
double r129183 = eps;
double r129184 = r129182 + r129183;
double r129185 = sin(r129184);
double r129186 = sin(r129182);
double r129187 = r129185 - r129186;
return r129187;
}
double f(double x, double eps) {
double r129188 = x;
double r129189 = sin(r129188);
double r129190 = eps;
double r129191 = cos(r129190);
double r129192 = 1.0;
double r129193 = r129191 - r129192;
double r129194 = cos(r129188);
double r129195 = cbrt(r129194);
double r129196 = r129195 * r129195;
double r129197 = sin(r129190);
double r129198 = r129195 * r129197;
double r129199 = r129196 * r129198;
double r129200 = fma(r129189, r129193, r129199);
double r129201 = -r129189;
double r129202 = fma(r129201, r129192, r129189);
double r129203 = r129200 + r129202;
return r129203;
}




Bits error versus x




Bits error versus eps
| Original | 37.0 |
|---|---|
| Target | 15.5 |
| Herbie | 0.8 |
Initial program 37.0
rmApplied sin-sum21.4
rmApplied add-cube-cbrt22.0
Applied add-sqr-sqrt42.7
Applied prod-diff42.7
Simplified21.7
Simplified0.4
rmApplied add-cube-cbrt0.8
Applied associate-*l*0.8
Final simplification0.8
herbie shell --seed 2020060 +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)))