\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6443.306290177518349082674831151962280273:\\
\;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\
\mathbf{elif}\;\varepsilon \le 5.463141894552383288993626720472102098469 \cdot 10^{-9}:\\
\;\;\;\;2 \cdot \left(\cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\
\end{array}double f(double x, double eps) {
double r6352783 = x;
double r6352784 = eps;
double r6352785 = r6352783 + r6352784;
double r6352786 = sin(r6352785);
double r6352787 = sin(r6352783);
double r6352788 = r6352786 - r6352787;
return r6352788;
}
double f(double x, double eps) {
double r6352789 = eps;
double r6352790 = -6443.306290177518;
bool r6352791 = r6352789 <= r6352790;
double r6352792 = x;
double r6352793 = sin(r6352792);
double r6352794 = cos(r6352789);
double r6352795 = r6352793 * r6352794;
double r6352796 = cos(r6352792);
double r6352797 = sin(r6352789);
double r6352798 = r6352796 * r6352797;
double r6352799 = r6352798 - r6352793;
double r6352800 = r6352795 + r6352799;
double r6352801 = 5.463141894552383e-09;
bool r6352802 = r6352789 <= r6352801;
double r6352803 = 2.0;
double r6352804 = r6352792 + r6352789;
double r6352805 = r6352804 + r6352792;
double r6352806 = r6352805 / r6352803;
double r6352807 = cos(r6352806);
double r6352808 = r6352789 / r6352803;
double r6352809 = sin(r6352808);
double r6352810 = r6352807 * r6352809;
double r6352811 = r6352803 * r6352810;
double r6352812 = r6352802 ? r6352811 : r6352800;
double r6352813 = r6352791 ? r6352800 : r6352812;
return r6352813;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.1 |
| Herbie | 0.6 |
if eps < -6443.306290177518 or 5.463141894552383e-09 < eps Initial program 29.9
rmApplied sin-sum0.5
Applied associate--l+0.5
if -6443.306290177518 < eps < 5.463141894552383e-09Initial program 44.2
rmApplied diff-sin44.2
Simplified0.7
Final simplification0.6
herbie shell --seed 2019174
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2.0 (* (cos (+ x (/ eps 2.0))) (sin (/ eps 2.0))))
(- (sin (+ x eps)) (sin x)))