\sin \left(x + \varepsilon\right) - \sin x
\frac{\sin x \cdot \left({\left(\cos \varepsilon\right)}^{3} - 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 r99159 = x;
double r99160 = eps;
double r99161 = r99159 + r99160;
double r99162 = sin(r99161);
double r99163 = sin(r99159);
double r99164 = r99162 - r99163;
return r99164;
}
double f(double x, double eps) {
double r99165 = x;
double r99166 = sin(r99165);
double r99167 = eps;
double r99168 = cos(r99167);
double r99169 = 3.0;
double r99170 = pow(r99168, r99169);
double r99171 = 1.0;
double r99172 = r99170 - r99171;
double r99173 = r99166 * r99172;
double r99174 = r99168 * r99168;
double r99175 = r99168 * r99171;
double r99176 = r99171 + r99175;
double r99177 = r99174 + r99176;
double r99178 = r99173 / r99177;
double r99179 = cos(r99165);
double r99180 = sin(r99167);
double r99181 = r99179 * r99180;
double r99182 = r99178 + r99181;
return r99182;
}




Bits error versus x




Bits error versus eps
Results
| Original | 36.9 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum21.6
rmApplied *-un-lft-identity21.6
Applied *-un-lft-identity21.6
Applied distribute-lft-out--21.6
Simplified0.4
rmApplied flip3--0.4
Applied associate-*r/0.4
Final simplification0.4
herbie shell --seed 2020020
(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)))