\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.6823151206119754 \cdot 10^{-9}:\\
\;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\
\mathbf{elif}\;\varepsilon \le 7.4364775183871708 \cdot 10^{-9}:\\
\;\;\;\;2 \cdot \left(\cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right) \cdot \sin \left(\frac{\varepsilon}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\end{array}double f(double x, double eps) {
double r152639 = x;
double r152640 = eps;
double r152641 = r152639 + r152640;
double r152642 = sin(r152641);
double r152643 = sin(r152639);
double r152644 = r152642 - r152643;
return r152644;
}
double f(double x, double eps) {
double r152645 = eps;
double r152646 = -6.6823151206119754e-09;
bool r152647 = r152645 <= r152646;
double r152648 = x;
double r152649 = sin(r152648);
double r152650 = cos(r152645);
double r152651 = r152649 * r152650;
double r152652 = cos(r152648);
double r152653 = sin(r152645);
double r152654 = r152652 * r152653;
double r152655 = r152654 - r152649;
double r152656 = r152651 + r152655;
double r152657 = 7.436477518387171e-09;
bool r152658 = r152645 <= r152657;
double r152659 = 2.0;
double r152660 = r152648 + r152645;
double r152661 = r152660 + r152648;
double r152662 = r152661 / r152659;
double r152663 = cos(r152662);
double r152664 = r152645 / r152659;
double r152665 = sin(r152664);
double r152666 = r152663 * r152665;
double r152667 = r152659 * r152666;
double r152668 = r152651 + r152654;
double r152669 = r152668 - r152649;
double r152670 = r152658 ? r152667 : r152669;
double r152671 = r152647 ? r152656 : r152670;
return r152671;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.1 |
| Herbie | 0.5 |
if eps < -6.6823151206119754e-09Initial program 30.1
rmApplied sin-sum0.6
Applied associate--l+0.7
if -6.6823151206119754e-09 < eps < 7.436477518387171e-09Initial program 45.0
rmApplied diff-sin45.0
Simplified0.3
if 7.436477518387171e-09 < eps Initial program 29.2
rmApplied sin-sum0.6
Final simplification0.5
herbie shell --seed 2020045
(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)))