\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\left(\sin \varepsilon\right), \left(\cos x\right), \left(\mathsf{fma}\left(\left(\sin x\right), \left(\cos \varepsilon\right), \left(-\sin x\right)\right)\right)\right)double f(double x, double eps) {
double r2911353 = x;
double r2911354 = eps;
double r2911355 = r2911353 + r2911354;
double r2911356 = sin(r2911355);
double r2911357 = sin(r2911353);
double r2911358 = r2911356 - r2911357;
return r2911358;
}
double f(double x, double eps) {
double r2911359 = eps;
double r2911360 = sin(r2911359);
double r2911361 = x;
double r2911362 = cos(r2911361);
double r2911363 = sin(r2911361);
double r2911364 = cos(r2911359);
double r2911365 = -r2911363;
double r2911366 = fma(r2911363, r2911364, r2911365);
double r2911367 = fma(r2911360, r2911362, r2911366);
return r2911367;
}




Bits error versus x




Bits error versus eps
| Original | 37.6 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 37.6
rmApplied sin-sum22.2
rmApplied log1p-expm1-u22.3
Simplified22.3
Taylor expanded around -inf 22.2
Simplified0.4
rmApplied fma-neg0.4
Final simplification0.4
herbie shell --seed 2019128 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))