\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 r4743332 = x;
double r4743333 = eps;
double r4743334 = r4743332 + r4743333;
double r4743335 = sin(r4743334);
double r4743336 = sin(r4743332);
double r4743337 = r4743335 - r4743336;
return r4743337;
}
double f(double x, double eps) {
double r4743338 = eps;
double r4743339 = -1.1998709236678226e-08;
bool r4743340 = r4743338 <= r4743339;
double r4743341 = x;
double r4743342 = cos(r4743341);
double r4743343 = sin(r4743338);
double r4743344 = r4743342 * r4743343;
double r4743345 = sin(r4743341);
double r4743346 = r4743344 - r4743345;
double r4743347 = cos(r4743338);
double r4743348 = r4743345 * r4743347;
double r4743349 = r4743346 + r4743348;
double r4743350 = 1.1087986248072222e-08;
bool r4743351 = r4743338 <= r4743350;
double r4743352 = 2.0;
double r4743353 = r4743338 / r4743352;
double r4743354 = sin(r4743353);
double r4743355 = fma(r4743352, r4743341, r4743338);
double r4743356 = r4743355 / r4743352;
double r4743357 = cos(r4743356);
double r4743358 = r4743354 * r4743357;
double r4743359 = r4743358 * r4743352;
double r4743360 = r4743348 + r4743344;
double r4743361 = r4743360 - r4743345;
double r4743362 = r4743351 ? r4743359 : r4743361;
double r4743363 = r4743340 ? r4743349 : r4743362;
return r4743363;
}




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)))