\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -8.78183908127777317 \cdot 10^{-9} \lor \neg \left(\varepsilon \le 1.19054048034770088 \cdot 10^{-8}\right):\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \cos \left(\frac{1}{2} \cdot \mathsf{fma}\left(x, 2, \varepsilon\right)\right)\right)\\
\end{array}double f(double x, double eps) {
double r111918 = x;
double r111919 = eps;
double r111920 = r111918 + r111919;
double r111921 = sin(r111920);
double r111922 = sin(r111918);
double r111923 = r111921 - r111922;
return r111923;
}
double f(double x, double eps) {
double r111924 = eps;
double r111925 = -8.781839081277773e-09;
bool r111926 = r111924 <= r111925;
double r111927 = 1.1905404803477009e-08;
bool r111928 = r111924 <= r111927;
double r111929 = !r111928;
bool r111930 = r111926 || r111929;
double r111931 = x;
double r111932 = sin(r111931);
double r111933 = cos(r111924);
double r111934 = r111932 * r111933;
double r111935 = cos(r111931);
double r111936 = sin(r111924);
double r111937 = r111935 * r111936;
double r111938 = r111934 + r111937;
double r111939 = r111938 - r111932;
double r111940 = 2.0;
double r111941 = 0.5;
double r111942 = r111941 * r111924;
double r111943 = sin(r111942);
double r111944 = fma(r111931, r111940, r111924);
double r111945 = r111941 * r111944;
double r111946 = cos(r111945);
double r111947 = r111943 * r111946;
double r111948 = r111940 * r111947;
double r111949 = r111930 ? r111939 : r111948;
return r111949;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
if eps < -8.781839081277773e-09 or 1.1905404803477009e-08 < eps Initial program 30.1
rmApplied sin-sum0.5
if -8.781839081277773e-09 < eps < 1.1905404803477009e-08Initial program 44.4
rmApplied diff-sin44.4
Simplified0.3
rmApplied expm1-log1p-u0.4
Simplified0.4
Taylor expanded around inf 0.3
Final simplification0.4
herbie shell --seed 2020046 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:precision binary64
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))