\sin \left(x + \varepsilon\right) - \sin x
\left(\left(\cos x \cdot \cos \left(\frac{1}{2} \cdot \varepsilon\right) - \log \left(e^{\sin \left(\frac{1}{2} \cdot \varepsilon\right) \cdot \sin x}\right)\right) \cdot \sin \left(\frac{1}{2} \cdot \varepsilon\right)\right) \cdot 2double f(double x, double eps) {
double r5060888 = x;
double r5060889 = eps;
double r5060890 = r5060888 + r5060889;
double r5060891 = sin(r5060890);
double r5060892 = sin(r5060888);
double r5060893 = r5060891 - r5060892;
return r5060893;
}
double f(double x, double eps) {
double r5060894 = x;
double r5060895 = cos(r5060894);
double r5060896 = 0.5;
double r5060897 = eps;
double r5060898 = r5060896 * r5060897;
double r5060899 = cos(r5060898);
double r5060900 = r5060895 * r5060899;
double r5060901 = sin(r5060898);
double r5060902 = sin(r5060894);
double r5060903 = r5060901 * r5060902;
double r5060904 = exp(r5060903);
double r5060905 = log(r5060904);
double r5060906 = r5060900 - r5060905;
double r5060907 = r5060906 * r5060901;
double r5060908 = 2.0;
double r5060909 = r5060907 * r5060908;
return r5060909;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.1
rmApplied diff-sin37.4
Simplified15.0
Taylor expanded around inf 15.0
Simplified15.0
rmApplied fma-udef15.0
Applied cos-sum0.3
rmApplied add-log-exp0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019200 +o rules:numerics
(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)))