\sin \left(x + \varepsilon\right) - \sin x
\frac{\sin x \cdot \left(\log \left(e^{{\left(\cos \varepsilon\right)}^{3}}\right) - 1\right)}{\cos \varepsilon \cdot \cos \varepsilon + \left(1 + \cos \varepsilon \cdot 1\right)} + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r111022 = x;
double r111023 = eps;
double r111024 = r111022 + r111023;
double r111025 = sin(r111024);
double r111026 = sin(r111022);
double r111027 = r111025 - r111026;
return r111027;
}
double f(double x, double eps) {
double r111028 = x;
double r111029 = sin(r111028);
double r111030 = eps;
double r111031 = cos(r111030);
double r111032 = 3.0;
double r111033 = pow(r111031, r111032);
double r111034 = exp(r111033);
double r111035 = log(r111034);
double r111036 = 1.0;
double r111037 = r111035 - r111036;
double r111038 = r111029 * r111037;
double r111039 = r111031 * r111031;
double r111040 = r111031 * r111036;
double r111041 = r111036 + r111040;
double r111042 = r111039 + r111041;
double r111043 = r111038 / r111042;
double r111044 = cos(r111028);
double r111045 = sin(r111030);
double r111046 = r111044 * r111045;
double r111047 = r111043 + r111046;
return r111047;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.5 |
|---|---|
| Target | 14.9 |
| Herbie | 0.5 |
Initial program 37.5
rmApplied sin-sum22.5
Taylor expanded around inf 22.5
Simplified0.4
rmApplied flip3--0.5
Applied associate-*r/0.5
Simplified0.5
rmApplied add-log-exp0.5
Final simplification0.5
herbie shell --seed 2019353
(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)))