\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -1.3657083573837753 \cdot 10^{-08}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\mathbf{elif}\;\varepsilon \le 4.683430512114554 \cdot 10^{-22}:\\
\;\;\;\;\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\mathsf{fma}\left(\frac{1}{2}, \varepsilon, x\right)\right)\right) \cdot 2\\
\mathbf{else}:\\
\;\;\;\;\left(\cos x \cdot \sin \varepsilon - \sin x\right) + \sin x \cdot \cos \varepsilon\\
\end{array}double f(double x, double eps) {
double r4108375 = x;
double r4108376 = eps;
double r4108377 = r4108375 + r4108376;
double r4108378 = sin(r4108377);
double r4108379 = sin(r4108375);
double r4108380 = r4108378 - r4108379;
return r4108380;
}
double f(double x, double eps) {
double r4108381 = eps;
double r4108382 = -1.3657083573837753e-08;
bool r4108383 = r4108381 <= r4108382;
double r4108384 = x;
double r4108385 = cos(r4108384);
double r4108386 = sin(r4108381);
double r4108387 = r4108385 * r4108386;
double r4108388 = sin(r4108384);
double r4108389 = r4108387 - r4108388;
double r4108390 = cos(r4108381);
double r4108391 = r4108388 * r4108390;
double r4108392 = r4108389 + r4108391;
double r4108393 = 4.683430512114554e-22;
bool r4108394 = r4108381 <= r4108393;
double r4108395 = 2.0;
double r4108396 = r4108381 / r4108395;
double r4108397 = sin(r4108396);
double r4108398 = 0.5;
double r4108399 = fma(r4108398, r4108381, r4108384);
double r4108400 = cos(r4108399);
double r4108401 = r4108397 * r4108400;
double r4108402 = r4108401 * r4108395;
double r4108403 = r4108394 ? r4108402 : r4108392;
double r4108404 = r4108383 ? r4108392 : r4108403;
return r4108404;
}




Bits error versus x




Bits error versus eps
| Original | 37.4 |
|---|---|
| Target | 15.3 |
| Herbie | 0.6 |
if eps < -1.3657083573837753e-08 or 4.683430512114554e-22 < eps Initial program 30.5
rmApplied sin-sum1.0
Applied associate--l+1.0
if -1.3657083573837753e-08 < eps < 4.683430512114554e-22Initial program 44.9
rmApplied diff-sin44.9
Simplified0.2
rmApplied log1p-expm1-u0.3
rmApplied expm1-log1p-u0.4
Simplified0.3
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.6
herbie shell --seed 2019132 +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)))