\sin \left(x + \varepsilon\right) - \sin x
\left(\sqrt[3]{\sin x} \cdot \sqrt[3]{\sin x}\right) \cdot \left(\sqrt[3]{\sin x} \cdot \left(\cos \varepsilon - 1\right)\right) + \cos x \cdot \sin \varepsilondouble f(double x, double eps) {
double r147045 = x;
double r147046 = eps;
double r147047 = r147045 + r147046;
double r147048 = sin(r147047);
double r147049 = sin(r147045);
double r147050 = r147048 - r147049;
return r147050;
}
double f(double x, double eps) {
double r147051 = x;
double r147052 = sin(r147051);
double r147053 = cbrt(r147052);
double r147054 = r147053 * r147053;
double r147055 = eps;
double r147056 = cos(r147055);
double r147057 = 1.0;
double r147058 = r147056 - r147057;
double r147059 = r147053 * r147058;
double r147060 = r147054 * r147059;
double r147061 = cos(r147051);
double r147062 = sin(r147055);
double r147063 = r147061 * r147062;
double r147064 = r147060 + r147063;
return r147064;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.6 |
|---|---|
| Target | 15.4 |
| Herbie | 0.6 |
Initial program 37.6
rmApplied sin-sum22.1
Applied associate--l+22.1
Taylor expanded around inf 22.1
Simplified0.4
rmApplied add-cube-cbrt0.6
Applied associate-*l*0.6
Final simplification0.6
herbie shell --seed 2020036
(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)))