\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\cos x, \sin \varepsilon, \mathsf{fma}\left(\cos \varepsilon, \sin x, -\sin x\right)\right)double f(double x, double eps) {
double r5411243 = x;
double r5411244 = eps;
double r5411245 = r5411243 + r5411244;
double r5411246 = sin(r5411245);
double r5411247 = sin(r5411243);
double r5411248 = r5411246 - r5411247;
return r5411248;
}
double f(double x, double eps) {
double r5411249 = x;
double r5411250 = cos(r5411249);
double r5411251 = eps;
double r5411252 = sin(r5411251);
double r5411253 = cos(r5411251);
double r5411254 = sin(r5411249);
double r5411255 = -r5411254;
double r5411256 = fma(r5411253, r5411254, r5411255);
double r5411257 = fma(r5411250, r5411252, r5411256);
return r5411257;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.1
rmApplied sin-sum22.0
Applied associate--l+22.0
Taylor expanded around inf 22.0
Simplified0.4
rmApplied fma-neg0.4
Final simplification0.4
herbie shell --seed 2019171 +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)))