\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -9.108842191445869 \cdot 10^{-09}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 1.2412047115655244 \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(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\end{array}double f(double x, double eps) {
double r3225883 = x;
double r3225884 = eps;
double r3225885 = r3225883 + r3225884;
double r3225886 = sin(r3225885);
double r3225887 = sin(r3225883);
double r3225888 = r3225886 - r3225887;
return r3225888;
}
double f(double x, double eps) {
double r3225889 = eps;
double r3225890 = -9.108842191445869e-09;
bool r3225891 = r3225889 <= r3225890;
double r3225892 = x;
double r3225893 = sin(r3225892);
double r3225894 = cos(r3225889);
double r3225895 = r3225893 * r3225894;
double r3225896 = cos(r3225892);
double r3225897 = sin(r3225889);
double r3225898 = r3225896 * r3225897;
double r3225899 = r3225895 + r3225898;
double r3225900 = r3225899 - r3225893;
double r3225901 = 1.2412047115655244e-08;
bool r3225902 = r3225889 <= r3225901;
double r3225903 = 2.0;
double r3225904 = r3225889 / r3225903;
double r3225905 = sin(r3225904);
double r3225906 = r3225892 + r3225889;
double r3225907 = r3225892 + r3225906;
double r3225908 = r3225907 / r3225903;
double r3225909 = cos(r3225908);
double r3225910 = r3225905 * r3225909;
double r3225911 = r3225903 * r3225910;
double r3225912 = r3225898 - r3225893;
double r3225913 = r3225912 + r3225895;
double r3225914 = r3225902 ? r3225911 : r3225913;
double r3225915 = r3225891 ? r3225900 : r3225914;
return r3225915;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.8 |
|---|---|
| Target | 14.6 |
| Herbie | 0.4 |
if eps < -9.108842191445869e-09Initial program 29.1
rmApplied sin-sum0.5
if -9.108842191445869e-09 < eps < 1.2412047115655244e-08Initial program 45.1
rmApplied diff-sin45.1
Simplified0.3
if 1.2412047115655244e-08 < eps Initial program 28.7
rmApplied sin-sum0.5
Applied associate--l+0.5
Final simplification0.4
herbie shell --seed 2019146
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))