\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -0.0328694148284930307:\\
\;\;\;\;\sin x \cdot \cos \varepsilon + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\
\mathbf{elif}\;\varepsilon \le 4.01911916950481984:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\sin x, \mathsf{fma}\left(\frac{1}{24}, {\varepsilon}^{4}, -\mathsf{fma}\left(\frac{1}{2}, {\varepsilon}^{2}, \frac{1}{720} \cdot {\varepsilon}^{6}\right)\right), \cos x \cdot \sin \varepsilon\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 r133723 = x;
double r133724 = eps;
double r133725 = r133723 + r133724;
double r133726 = sin(r133725);
double r133727 = sin(r133723);
double r133728 = r133726 - r133727;
return r133728;
}
double f(double x, double eps) {
double r133729 = eps;
double r133730 = -0.03286941482849303;
bool r133731 = r133729 <= r133730;
double r133732 = x;
double r133733 = sin(r133732);
double r133734 = cos(r133729);
double r133735 = r133733 * r133734;
double r133736 = cos(r133732);
double r133737 = sin(r133729);
double r133738 = r133736 * r133737;
double r133739 = r133738 - r133733;
double r133740 = r133735 + r133739;
double r133741 = 4.01911916950482;
bool r133742 = r133729 <= r133741;
double r133743 = 1.0;
double r133744 = 0.041666666666666664;
double r133745 = 4.0;
double r133746 = pow(r133729, r133745);
double r133747 = 0.5;
double r133748 = 2.0;
double r133749 = pow(r133729, r133748);
double r133750 = 0.001388888888888889;
double r133751 = 6.0;
double r133752 = pow(r133729, r133751);
double r133753 = r133750 * r133752;
double r133754 = fma(r133747, r133749, r133753);
double r133755 = -r133754;
double r133756 = fma(r133744, r133746, r133755);
double r133757 = fma(r133733, r133756, r133738);
double r133758 = r133743 * r133757;
double r133759 = r133735 + r133738;
double r133760 = r133759 - r133733;
double r133761 = r133742 ? r133758 : r133760;
double r133762 = r133731 ? r133740 : r133761;
return r133762;
}




Bits error versus x




Bits error versus eps
| Original | 37.1 |
|---|---|
| Target | 14.4 |
| Herbie | 0.3 |
if eps < -0.03286941482849303Initial program 29.1
rmApplied sin-sum0.4
Applied associate--l+0.4
if -0.03286941482849303 < eps < 4.01911916950482Initial program 44.4
rmApplied sin-sum43.5
rmApplied *-un-lft-identity43.5
Applied *-un-lft-identity43.5
Applied distribute-lft-out--43.5
Simplified0.4
Taylor expanded around 0 0.2
Simplified0.2
if 4.01911916950482 < eps Initial program 29.8
rmApplied sin-sum0.4
Final simplification0.3
herbie shell --seed 2020035 +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)))