\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 r157709 = x;
double r157710 = eps;
double r157711 = r157709 + r157710;
double r157712 = sin(r157711);
double r157713 = sin(r157709);
double r157714 = r157712 - r157713;
return r157714;
}
double f(double x, double eps) {
double r157715 = x;
double r157716 = sin(r157715);
double r157717 = cbrt(r157716);
double r157718 = r157717 * r157717;
double r157719 = eps;
double r157720 = cos(r157719);
double r157721 = 1.0;
double r157722 = r157720 - r157721;
double r157723 = r157717 * r157722;
double r157724 = r157718 * r157723;
double r157725 = cos(r157715);
double r157726 = sin(r157719);
double r157727 = r157725 * r157726;
double r157728 = r157724 + r157727;
return r157728;
}




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)))