\sin \left(x + \varepsilon\right) - \sin x
\left(\frac{\sin x \cdot \left({\left(\cos \varepsilon\right)}^{3} - 1\right)}{\cos \varepsilon \cdot \cos \varepsilon + \left(1 + \cos \varepsilon \cdot 1\right)} + \cos x \cdot \sin \varepsilon\right) + \mathsf{fma}\left(-\sin x, 1, \sin x\right)double f(double x, double eps) {
double r159244 = x;
double r159245 = eps;
double r159246 = r159244 + r159245;
double r159247 = sin(r159246);
double r159248 = sin(r159244);
double r159249 = r159247 - r159248;
return r159249;
}
double f(double x, double eps) {
double r159250 = x;
double r159251 = sin(r159250);
double r159252 = eps;
double r159253 = cos(r159252);
double r159254 = 3.0;
double r159255 = pow(r159253, r159254);
double r159256 = 1.0;
double r159257 = r159255 - r159256;
double r159258 = r159251 * r159257;
double r159259 = r159253 * r159253;
double r159260 = r159253 * r159256;
double r159261 = r159256 + r159260;
double r159262 = r159259 + r159261;
double r159263 = r159258 / r159262;
double r159264 = cos(r159250);
double r159265 = sin(r159252);
double r159266 = r159264 * r159265;
double r159267 = r159263 + r159266;
double r159268 = -r159251;
double r159269 = fma(r159268, r159256, r159251);
double r159270 = r159267 + r159269;
return r159270;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum21.6
rmApplied add-cube-cbrt22.2
Applied add-sqr-sqrt43.2
Applied prod-diff43.3
Simplified21.9
Simplified0.4
rmApplied fma-udef0.4
rmApplied flip3--0.4
Applied associate-*r/0.4
Final simplification0.4
herbie shell --seed 2020020 +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)))