\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \log \left(e^{\cos \varepsilon - 1}\right), \cos x \cdot \sin \varepsilon\right) + \mathsf{fma}\left(-\sin x, 1, \sin x\right)double f(double x, double eps) {
double r132680 = x;
double r132681 = eps;
double r132682 = r132680 + r132681;
double r132683 = sin(r132682);
double r132684 = sin(r132680);
double r132685 = r132683 - r132684;
return r132685;
}
double f(double x, double eps) {
double r132686 = x;
double r132687 = sin(r132686);
double r132688 = eps;
double r132689 = cos(r132688);
double r132690 = 1.0;
double r132691 = r132689 - r132690;
double r132692 = exp(r132691);
double r132693 = log(r132692);
double r132694 = cos(r132686);
double r132695 = sin(r132688);
double r132696 = r132694 * r132695;
double r132697 = fma(r132687, r132693, r132696);
double r132698 = -r132687;
double r132699 = fma(r132698, r132690, r132687);
double r132700 = r132697 + r132699;
return r132700;
}




Bits error versus x




Bits error versus eps
| Original | 37.0 |
|---|---|
| Target | 15.2 |
| Herbie | 0.4 |
Initial program 37.0
rmApplied sin-sum21.7
rmApplied add-cube-cbrt22.2
Applied add-sqr-sqrt43.0
Applied prod-diff43.0
Simplified22.0
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.5
Simplified0.4
Final simplification0.4
herbie shell --seed 2020064 +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)))