\sin \left(x + \varepsilon\right) - \sin x
\mathsf{fma}\left(\sin x, \log \left(e^{\frac{\mathsf{fma}\left({\left(\cos \varepsilon\right)}^{3}, 1, -1\right)}{\mathsf{fma}\left(\cos \varepsilon, \cos \varepsilon + 1, 1\right)}}\right), \cos x \cdot \sin \varepsilon\right)double f(double x, double eps) {
double r113655 = x;
double r113656 = eps;
double r113657 = r113655 + r113656;
double r113658 = sin(r113657);
double r113659 = sin(r113655);
double r113660 = r113658 - r113659;
return r113660;
}
double f(double x, double eps) {
double r113661 = x;
double r113662 = sin(r113661);
double r113663 = eps;
double r113664 = cos(r113663);
double r113665 = 3.0;
double r113666 = pow(r113664, r113665);
double r113667 = 1.0;
double r113668 = -1.0;
double r113669 = fma(r113666, r113667, r113668);
double r113670 = r113664 + r113667;
double r113671 = fma(r113664, r113670, r113667);
double r113672 = r113669 / r113671;
double r113673 = exp(r113672);
double r113674 = log(r113673);
double r113675 = cos(r113661);
double r113676 = sin(r113663);
double r113677 = r113675 * r113676;
double r113678 = fma(r113662, r113674, r113677);
return r113678;
}




Bits error versus x




Bits error versus eps
| Original | 36.9 |
|---|---|
| Target | 15.0 |
| Herbie | 0.4 |
Initial program 36.9
rmApplied sin-sum21.7
rmApplied *-un-lft-identity21.7
Applied *-un-lft-identity21.7
Applied distribute-lft-out--21.7
Simplified0.4
rmApplied add-log-exp0.4
Applied add-log-exp0.4
Applied diff-log0.4
Simplified0.4
rmApplied flip3--0.4
Simplified0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020001 +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)))