\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -0.0987473663124097:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 1.300741008615541 \cdot 10^{-08}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{x + \left(x + \varepsilon\right)}{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 r2984396 = x;
double r2984397 = eps;
double r2984398 = r2984396 + r2984397;
double r2984399 = sin(r2984398);
double r2984400 = sin(r2984396);
double r2984401 = r2984399 - r2984400;
return r2984401;
}
double f(double x, double eps) {
double r2984402 = eps;
double r2984403 = -0.0987473663124097;
bool r2984404 = r2984402 <= r2984403;
double r2984405 = x;
double r2984406 = sin(r2984405);
double r2984407 = cos(r2984402);
double r2984408 = r2984406 * r2984407;
double r2984409 = cos(r2984405);
double r2984410 = sin(r2984402);
double r2984411 = r2984409 * r2984410;
double r2984412 = r2984408 + r2984411;
double r2984413 = r2984412 - r2984406;
double r2984414 = 1.300741008615541e-08;
bool r2984415 = r2984402 <= r2984414;
double r2984416 = 2.0;
double r2984417 = r2984402 / r2984416;
double r2984418 = sin(r2984417);
double r2984419 = r2984405 + r2984402;
double r2984420 = r2984405 + r2984419;
double r2984421 = r2984420 / r2984416;
double r2984422 = cos(r2984421);
double r2984423 = r2984418 * r2984422;
double r2984424 = r2984416 * r2984423;
double r2984425 = r2984415 ? r2984424 : r2984413;
double r2984426 = r2984404 ? r2984413 : r2984425;
return r2984426;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.4 |
|---|---|
| Target | 14.9 |
| Herbie | 0.5 |
if eps < -0.0987473663124097 or 1.300741008615541e-08 < eps Initial program 30.0
rmApplied sin-sum0.5
if -0.0987473663124097 < eps < 1.300741008615541e-08Initial program 44.8
rmApplied diff-sin44.8
Simplified0.5
Final simplification0.5
herbie shell --seed 2019142
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))