\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 r90592 = x;
double r90593 = eps;
double r90594 = r90592 + r90593;
double r90595 = sin(r90594);
double r90596 = sin(r90592);
double r90597 = r90595 - r90596;
return r90597;
}
double f(double x, double eps) {
double r90598 = eps;
double r90599 = cos(r90598);
double r90600 = 1.0;
double r90601 = r90599 - r90600;
double r90602 = x;
double r90603 = sin(r90602);
double r90604 = r90601 * r90603;
double r90605 = cos(r90602);
double r90606 = sin(r90598);
double r90607 = r90605 * r90606;
double r90608 = r90604 + r90607;
return r90608;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.3 |
|---|---|
| Target | 14.8 |
| Herbie | 0.4 |
Initial program 37.3
rmApplied sin-sum22.3
Taylor expanded around inf 22.3
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 2020039 +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)))