\sin \left(x + \varepsilon\right) - \sin x
\begin{array}{l}
\mathbf{if}\;\varepsilon \le -6.003662832459115 \cdot 10^{-08}:\\
\;\;\;\;\frac{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) \cdot \left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) - \sin x \cdot \sin x}{\left(\sin x \cdot \cos \varepsilon + \cos x \cdot \sin \varepsilon\right) + \sin x}\\
\mathbf{elif}\;\varepsilon \le 4.6205156282696306 \cdot 10^{-12}:\\
\;\;\;\;\left(\sin \left(\frac{\varepsilon}{2}\right) \cdot \cos \left(\frac{x + \left(x + \varepsilon\right)}{2}\right)\right) \cdot 2\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\left(\sin x \cdot \cos \varepsilon\right) \cdot \left(\sin x \cdot \cos \varepsilon\right)\right) \cdot \left(\sin x \cdot \cos \varepsilon\right)} + \left(\cos x \cdot \sin \varepsilon - \sin x\right)\\
\end{array}double f(double x, double eps) {
double r8165277 = x;
double r8165278 = eps;
double r8165279 = r8165277 + r8165278;
double r8165280 = sin(r8165279);
double r8165281 = sin(r8165277);
double r8165282 = r8165280 - r8165281;
return r8165282;
}
double f(double x, double eps) {
double r8165283 = eps;
double r8165284 = -6.003662832459115e-08;
bool r8165285 = r8165283 <= r8165284;
double r8165286 = x;
double r8165287 = sin(r8165286);
double r8165288 = cos(r8165283);
double r8165289 = r8165287 * r8165288;
double r8165290 = cos(r8165286);
double r8165291 = sin(r8165283);
double r8165292 = r8165290 * r8165291;
double r8165293 = r8165289 + r8165292;
double r8165294 = r8165293 * r8165293;
double r8165295 = r8165287 * r8165287;
double r8165296 = r8165294 - r8165295;
double r8165297 = r8165293 + r8165287;
double r8165298 = r8165296 / r8165297;
double r8165299 = 4.6205156282696306e-12;
bool r8165300 = r8165283 <= r8165299;
double r8165301 = 2.0;
double r8165302 = r8165283 / r8165301;
double r8165303 = sin(r8165302);
double r8165304 = r8165286 + r8165283;
double r8165305 = r8165286 + r8165304;
double r8165306 = r8165305 / r8165301;
double r8165307 = cos(r8165306);
double r8165308 = r8165303 * r8165307;
double r8165309 = r8165308 * r8165301;
double r8165310 = r8165289 * r8165289;
double r8165311 = r8165310 * r8165289;
double r8165312 = cbrt(r8165311);
double r8165313 = r8165292 - r8165287;
double r8165314 = r8165312 + r8165313;
double r8165315 = r8165300 ? r8165309 : r8165314;
double r8165316 = r8165285 ? r8165298 : r8165315;
return r8165316;
}




Bits error versus x




Bits error versus eps
Results
| Original | 37.0 |
|---|---|
| Target | 15.2 |
| Herbie | 0.5 |
if eps < -6.003662832459115e-08Initial program 30.0
rmApplied sin-sum0.5
rmApplied flip--0.7
if -6.003662832459115e-08 < eps < 4.6205156282696306e-12Initial program 45.1
rmApplied diff-sin45.1
Simplified0.3
if 4.6205156282696306e-12 < eps Initial program 29.3
rmApplied sin-sum0.7
rmApplied associate--l+0.7
rmApplied add-cbrt-cube0.8
Applied add-cbrt-cube0.8
Applied cbrt-unprod0.8
Simplified0.8
Final simplification0.5
herbie shell --seed 2019107
(FPCore (x eps)
:name "2sin (example 3.3)"
:herbie-target
(* 2 (* (cos (+ x (/ eps 2))) (sin (/ eps 2))))
(- (sin (+ x eps)) (sin x)))