\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 r138806 = x;
double r138807 = eps;
double r138808 = r138806 + r138807;
double r138809 = sin(r138808);
double r138810 = sin(r138806);
double r138811 = r138809 - r138810;
return r138811;
}
double f(double x, double eps) {
double r138812 = eps;
double r138813 = cos(r138812);
double r138814 = 1.0;
double r138815 = r138813 - r138814;
double r138816 = x;
double r138817 = sin(r138816);
double r138818 = r138815 * r138817;
double r138819 = cos(r138816);
double r138820 = sin(r138812);
double r138821 = r138819 * r138820;
double r138822 = r138818 + r138821;
return r138822;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.4 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 37.4
rmApplied sin-sum22.1
rmApplied *-un-lft-identity22.1
Applied *-un-lft-identity22.1
Applied distribute-lft-out--22.1
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 2020100 +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)))