double f(double x, double eps) {
double r6234573 = x;
double r6234574 = eps;
double r6234575 = r6234573 + r6234574;
double r6234576 = sin(r6234575);
double r6234577 = sin(r6234573);
double r6234578 = r6234576 - r6234577;
return r6234578;
}
double f(double x, double eps) {
double r6234579 = eps;
double r6234580 = -0.0020458699213328716;
bool r6234581 = r6234579 <= r6234580;
double r6234582 = x;
double r6234583 = sin(r6234582);
double r6234584 = cos(r6234579);
double r6234585 = r6234583 * r6234584;
double r6234586 = cos(r6234582);
double r6234587 = sin(r6234579);
double r6234588 = r6234586 * r6234587;
double r6234589 = r6234585 + r6234588;
double r6234590 = r6234589 - r6234583;
double r6234591 = 2.414794756854271e-24;
bool r6234592 = r6234579 <= r6234591;
double r6234593 = 2.0;
double r6234594 = r6234579 / r6234593;
double r6234595 = sin(r6234594);
double r6234596 = r6234582 + r6234579;
double r6234597 = r6234596 + r6234582;
double r6234598 = r6234597 / r6234593;
double r6234599 = cos(r6234598);
double r6234600 = r6234595 * r6234599;
double r6234601 = r6234593 * r6234600;
double r6234602 = r6234588 - r6234583;
double r6234603 = r6234602 + r6234585;
double r6234604 = r6234592 ? r6234601 : r6234603;
double r6234605 = r6234581 ? r6234590 : r6234604;
return r6234605;
}
\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -0.0020458699213328716:\\
\;\;\;\;\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x\\
\mathbf{elif}\;\varepsilon \le 2.414794756854271 \cdot 10^{-24}:\\
\;\;\;\;2 \cdot \left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\left(x + \varepsilon\right) + x}{2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\end{array}



Bits error versus x




Bits error versus eps
| Original | 36.7 |
|---|---|
| Target | 15.0 |
| Herbie | 0.7 |
if eps < -0.0020458699213328716Initial program 30.4
rmApplied sin-sum0.4
if -0.0020458699213328716 < eps < 2.414794756854271e-24Initial program 44.1
rmApplied diff-sin44.1
Simplified0.4
if 2.414794756854271e-24 < eps Initial program 29.3
rmApplied sin-sum1.5
Applied associate--l+1.5
Final simplification0.7
herbie shell --seed 2019102
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))