\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 r110061 = x;
double r110062 = eps;
double r110063 = r110061 + r110062;
double r110064 = sin(r110063);
double r110065 = sin(r110061);
double r110066 = r110064 - r110065;
return r110066;
}
double f(double x, double eps) {
double r110067 = x;
double r110068 = sin(r110067);
double r110069 = eps;
double r110070 = cos(r110069);
double r110071 = 3.0;
double r110072 = pow(r110070, r110071);
double r110073 = 1.0;
double r110074 = r110072 - r110073;
double r110075 = r110068 * r110074;
double r110076 = r110070 * r110070;
double r110077 = r110070 * r110073;
double r110078 = r110073 + r110077;
double r110079 = r110076 + r110078;
double r110080 = r110075 / r110079;
double r110081 = cos(r110067);
double r110082 = sin(r110069);
double r110083 = r110081 * r110082;
double r110084 = r110080 + r110083;
return r110084;
}




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
rmApplied *-un-lft-identity22.5
Applied *-un-lft-identity22.5
Applied distribute-lft-out--22.5
Simplified0.4
rmApplied fma-udef0.4
rmApplied flip3--0.5
Applied associate-*r/0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019353 +o rules:numerics
(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)))