\sin \left(x + \varepsilon\right) - \sin x
\left(\cos \varepsilon - 1\right) \cdot \sin x + \cos x \cdot \sin \varepsilon
double f(double x, double eps) {
double r128030 = x;
double r128031 = eps;
double r128032 = r128030 + r128031;
double r128033 = sin(r128032);
double r128034 = sin(r128030);
double r128035 = r128033 - r128034;
return r128035;
}
double f(double x, double eps) {
double r128036 = eps;
double r128037 = cos(r128036);
double r128038 = 1.0;
double r128039 = r128037 - r128038;
double r128040 = x;
double r128041 = sin(r128040);
double r128042 = r128039 * r128041;
double r128043 = cos(r128040);
double r128044 = sin(r128036);
double r128045 = r128043 * r128044;
double r128046 = r128042 + r128045;
return r128046;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.1 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.1
rmApplied sin-sum22.0
rmApplied *-un-lft-identity22.0
Applied *-un-lft-identity22.0
Applied distribute-lft-out--22.0
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.5
Simplified0.4
rmApplied fma-udef0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020062 +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)))