\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -4.8405504526778714 \cdot 10^{-08}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\mathbf{elif}\;\varepsilon \le 2.017940082101193 \cdot 10^{-09}:\\
\;\;\;\;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 r4336695 = x;
double r4336696 = eps;
double r4336697 = r4336695 + r4336696;
double r4336698 = sin(r4336697);
double r4336699 = sin(r4336695);
double r4336700 = r4336698 - r4336699;
return r4336700;
}
double f(double x, double eps) {
double r4336701 = eps;
double r4336702 = -4.8405504526778714e-08;
bool r4336703 = r4336701 <= r4336702;
double r4336704 = x;
double r4336705 = cos(r4336704);
double r4336706 = sin(r4336701);
double r4336707 = r4336705 * r4336706;
double r4336708 = sin(r4336704);
double r4336709 = r4336707 - r4336708;
double r4336710 = cos(r4336701);
double r4336711 = r4336708 * r4336710;
double r4336712 = r4336709 + r4336711;
double r4336713 = 2.017940082101193e-09;
bool r4336714 = r4336701 <= r4336713;
double r4336715 = 2.0;
double r4336716 = r4336701 / r4336715;
double r4336717 = sin(r4336716);
double r4336718 = r4336704 + r4336701;
double r4336719 = r4336704 + r4336718;
double r4336720 = r4336719 / r4336715;
double r4336721 = cos(r4336720);
double r4336722 = r4336717 * r4336721;
double r4336723 = r4336715 * r4336722;
double r4336724 = r4336711 + r4336707;
double r4336725 = r4336724 - r4336708;
double r4336726 = r4336714 ? r4336723 : r4336725;
double r4336727 = r4336703 ? r4336712 : r4336726;
return r4336727;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.3 |
| Herbie | 0.4 |
if eps < -4.8405504526778714e-08Initial program 29.1
rmApplied sin-sum0.5
Applied associate--l+0.5
if -4.8405504526778714e-08 < eps < 2.017940082101193e-09Initial program 45.3
rmApplied diff-sin45.3
Simplified0.3
if 2.017940082101193e-09 < eps Initial program 30.2
rmApplied sin-sum0.5
Final simplification0.4
herbie shell --seed 2019133
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))