\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -2.082748610758504 \cdot 10^{-07}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 2.4662243898819633 \cdot 10^{-08}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\end{array}double f(double x, double eps) {
double r6644284 = x;
double r6644285 = eps;
double r6644286 = r6644284 + r6644285;
double r6644287 = sin(r6644286);
double r6644288 = sin(r6644284);
double r6644289 = r6644287 - r6644288;
return r6644289;
}
double f(double x, double eps) {
double r6644290 = eps;
double r6644291 = -2.082748610758504e-07;
bool r6644292 = r6644290 <= r6644291;
double r6644293 = x;
double r6644294 = sin(r6644293);
double r6644295 = cos(r6644290);
double r6644296 = r6644294 * r6644295;
double r6644297 = cos(r6644293);
double r6644298 = sin(r6644290);
double r6644299 = r6644297 * r6644298;
double r6644300 = r6644296 + r6644299;
double r6644301 = r6644300 - r6644294;
double r6644302 = 2.4662243898819633e-08;
bool r6644303 = r6644290 <= r6644302;
double r6644304 = 2.0;
double r6644305 = r6644290 / r6644304;
double r6644306 = sin(r6644305);
double r6644307 = r6644293 + r6644290;
double r6644308 = r6644307 + r6644293;
double r6644309 = r6644308 / r6644304;
double r6644310 = cos(r6644309);
double r6644311 = r6644306 * r6644310;
double r6644312 = r6644304 * r6644311;
double r6644313 = r6644303 ? r6644312 : r6644301;
double r6644314 = r6644292 ? r6644301 : r6644313;
return r6644314;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.1 |
| Herbie | 0.5 |
if eps < -2.082748610758504e-07 or 2.4662243898819633e-08 < eps Initial program 29.8
rmApplied sin-sum0.6
if -2.082748610758504e-07 < eps < 2.4662243898819633e-08Initial program 44.7
rmApplied diff-sin44.7
Simplified0.4
Final simplification0.5
herbie shell --seed 2019104
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))