\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\cos \left(\frac{1}{2} \cdot \varepsilon\right), \cos x, -\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin x\right) \cdot \left(2 \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right)double f(double x, double eps) {
double r12278429 = x;
double r12278430 = eps;
double r12278431 = r12278429 + r12278430;
double r12278432 = sin(r12278431);
double r12278433 = sin(r12278429);
double r12278434 = r12278432 - r12278433;
return r12278434;
}
double f(double x, double eps) {
double r12278435 = 0.5;
double r12278436 = eps;
double r12278437 = r12278435 * r12278436;
double r12278438 = cos(r12278437);
double r12278439 = x;
double r12278440 = cos(r12278439);
double r12278441 = sin(r12278437);
double r12278442 = sin(r12278439);
double r12278443 = r12278441 * r12278442;
double r12278444 = -r12278443;
double r12278445 = fma(r12278438, r12278440, r12278444);
double r12278446 = 2.0;
double r12278447 = r12278446 * r12278441;
double r12278448 = r12278445 * r12278447;
return r12278448;
}




Bits error versus x




Bits error versus eps
| Original | 37.0 |
|---|---|
| Target | 15.0 |
| Herbie | 0.3 |
Initial program 37.0
rmApplied diff-sin37.4
Simplified15.0
Taylor expanded around inf 15.0
Simplified15.0
rmApplied fma-udef15.0
Applied cos-sum0.3
rmApplied fma-neg0.3
Final simplification0.3
herbie shell --seed 2019173 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2.0 (* (cos (+ x (/ eps 2.0))) (sin (/ eps 2.0))))
(- (sin (+ x eps)) (sin x)))