double f(double x, double eps) {
double r9113286 = x;
double r9113287 = eps;
double r9113288 = r9113286 + r9113287;
double r9113289 = sin(r9113288);
double r9113290 = sin(r9113286);
double r9113291 = r9113289 - r9113290;
return r9113291;
}
double f(double x, double eps) {
double r9113292 = eps;
double r9113293 = -9.19400682434756e-09;
bool r9113294 = r9113292 <= r9113293;
double r9113295 = x;
double r9113296 = sin(r9113295);
double r9113297 = cos(r9113292);
double r9113298 = r9113296 * r9113297;
double r9113299 = cos(r9113295);
double r9113300 = sin(r9113292);
double r9113301 = r9113299 * r9113300;
double r9113302 = r9113298 + r9113301;
double r9113303 = r9113302 - r9113296;
double r9113304 = 7.528901759687215e-09;
bool r9113305 = r9113292 <= r9113304;
double r9113306 = 2.0;
double r9113307 = r9113292 / r9113306;
double r9113308 = sin(r9113307);
double r9113309 = r9113295 + r9113292;
double r9113310 = r9113309 + r9113295;
double r9113311 = r9113310 / r9113306;
double r9113312 = cos(r9113311);
double r9113313 = r9113308 * r9113312;
double r9113314 = r9113306 * r9113313;
double r9113315 = r9113301 - r9113296;
double r9113316 = r9113315 + r9113298;
double r9113317 = r9113305 ? r9113314 : r9113316;
double r9113318 = r9113294 ? r9113303 : r9113317;
return r9113318;
}
\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.19400682434756 \cdot 10^{-09}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 7.528901759687215 \cdot 10^{-09}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\end{array}



Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.1 |
| Herbie | 0.4 |
if eps < -9.19400682434756e-09Initial program 29.7
rmApplied sin-sum0.5
if -9.19400682434756e-09 < eps < 7.528901759687215e-09Initial program 44.8
rmApplied diff-sin44.8
Simplified0.3
if 7.528901759687215e-09 < eps Initial program 30.0
rmApplied sin-sum0.6
Applied associate--l+0.6
Final simplification0.4
herbie shell --seed 2019101
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))