\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.1998709236678226 \cdot 10^{-08}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\mathbf{elif}\;\varepsilon \le 1.1087986248072222 \cdot 10^{-08}:\\
\;\;\;\;\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{\mathsf{fma}\left(2, x, \varepsilon\right)}{2}\right)\right) \cdot 2\\
\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 r5929254 = x;
double r5929255 = eps;
double r5929256 = r5929254 + r5929255;
double r5929257 = sin(r5929256);
double r5929258 = sin(r5929254);
double r5929259 = r5929257 - r5929258;
return r5929259;
}
double f(double x, double eps) {
double r5929260 = eps;
double r5929261 = -1.1998709236678226e-08;
bool r5929262 = r5929260 <= r5929261;
double r5929263 = x;
double r5929264 = cos(r5929263);
double r5929265 = sin(r5929260);
double r5929266 = r5929264 * r5929265;
double r5929267 = sin(r5929263);
double r5929268 = r5929266 - r5929267;
double r5929269 = cos(r5929260);
double r5929270 = r5929267 * r5929269;
double r5929271 = r5929268 + r5929270;
double r5929272 = 1.1087986248072222e-08;
bool r5929273 = r5929260 <= r5929272;
double r5929274 = 2.0;
double r5929275 = r5929260 / r5929274;
double r5929276 = sin(r5929275);
double r5929277 = fma(r5929274, r5929263, r5929260);
double r5929278 = r5929277 / r5929274;
double r5929279 = cos(r5929278);
double r5929280 = r5929276 * r5929279;
double r5929281 = r5929280 * r5929274;
double r5929282 = r5929270 + r5929266;
double r5929283 = r5929282 - r5929267;
double r5929284 = r5929273 ? r5929281 : r5929283;
double r5929285 = r5929262 ? r5929271 : r5929284;
return r5929285;
}




Bits error versus x




Bits error versus eps
| Original | 37.5 |
|---|---|
| Target | 15.6 |
| Herbie | 0.5 |
if eps < -1.1998709236678226e-08Initial program 31.1
rmApplied sin-sum0.6
Applied associate--l+0.6
if -1.1998709236678226e-08 < eps < 1.1087986248072222e-08Initial program 44.4
rmApplied diff-sin44.4
Simplified0.3
if 1.1087986248072222e-08 < eps Initial program 30.9
rmApplied sin-sum0.6
Final simplification0.5
herbie shell --seed 2019162 +o rules:numerics
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))