\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 r8061262 = x;
double r8061263 = eps;
double r8061264 = r8061262 + r8061263;
double r8061265 = sin(r8061264);
double r8061266 = sin(r8061262);
double r8061267 = r8061265 - r8061266;
return r8061267;
}
double f(double x, double eps) {
double r8061268 = eps;
double r8061269 = -6.003662832459115e-08;
bool r8061270 = r8061268 <= r8061269;
double r8061271 = x;
double r8061272 = sin(r8061271);
double r8061273 = cos(r8061268);
double r8061274 = r8061272 * r8061273;
double r8061275 = cos(r8061271);
double r8061276 = sin(r8061268);
double r8061277 = r8061275 * r8061276;
double r8061278 = r8061274 + r8061277;
double r8061279 = r8061278 * r8061278;
double r8061280 = r8061272 * r8061272;
double r8061281 = r8061279 - r8061280;
double r8061282 = r8061278 + r8061272;
double r8061283 = r8061281 / r8061282;
double r8061284 = 4.6205156282696306e-12;
bool r8061285 = r8061268 <= r8061284;
double r8061286 = 2.0;
double r8061287 = r8061268 / r8061286;
double r8061288 = sin(r8061287);
double r8061289 = r8061271 + r8061268;
double r8061290 = r8061271 + r8061289;
double r8061291 = r8061290 / r8061286;
double r8061292 = cos(r8061291);
double r8061293 = r8061288 * r8061292;
double r8061294 = r8061293 * r8061286;
double r8061295 = r8061274 * r8061274;
double r8061296 = r8061295 * r8061274;
double r8061297 = cbrt(r8061296);
double r8061298 = r8061277 - r8061272;
double r8061299 = r8061297 + r8061298;
double r8061300 = r8061285 ? r8061294 : r8061299;
double r8061301 = r8061270 ? r8061283 : r8061300;
return r8061301;
}




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