\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.379308090176633415808603902149090392193 \cdot 10^{-8}:\\
\;\;\;\;\left(\cos \varepsilon \cdot \sin x + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 6.52085484414657072417395637610113001692 \cdot 10^{-9}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{x + \left(\varepsilon + x\right)}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \cos \varepsilon \cdot \sin x\\
\end{array}double f(double x, double eps) {
double r138844 = x;
double r138845 = eps;
double r138846 = r138844 + r138845;
double r138847 = sin(r138846);
double r138848 = sin(r138844);
double r138849 = r138847 - r138848;
return r138849;
}
double f(double x, double eps) {
double r138850 = eps;
double r138851 = -1.3793080901766334e-08;
bool r138852 = r138850 <= r138851;
double r138853 = cos(r138850);
double r138854 = x;
double r138855 = sin(r138854);
double r138856 = r138853 * r138855;
double r138857 = cos(r138854);
double r138858 = sin(r138850);
double r138859 = r138857 * r138858;
double r138860 = r138856 + r138859;
double r138861 = r138860 - r138855;
double r138862 = 6.520854844146571e-09;
bool r138863 = r138850 <= r138862;
double r138864 = 2.0;
double r138865 = r138850 / r138864;
double r138866 = sin(r138865);
double r138867 = r138850 + r138854;
double r138868 = r138854 + r138867;
double r138869 = r138868 / r138864;
double r138870 = cos(r138869);
double r138871 = r138866 * r138870;
double r138872 = r138864 * r138871;
double r138873 = r138859 - r138855;
double r138874 = r138873 + r138856;
double r138875 = r138863 ? r138872 : r138874;
double r138876 = r138852 ? r138861 : r138875;
return r138876;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 14.9 |
| Herbie | 0.4 |
if eps < -1.3793080901766334e-08Initial program 29.7
rmApplied sin-sum0.5
Simplified0.5
if -1.3793080901766334e-08 < eps < 6.520854844146571e-09Initial program 44.9
rmApplied diff-sin44.9
Simplified0.3
if 6.520854844146571e-09 < eps Initial program 30.1
rmApplied sin-sum0.5
Applied associate--l+0.5
Final simplification0.4
herbie shell --seed 2019196
(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)))