x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -4.305314767396193330218747505070664723588 \cdot 10^{-32} \lor \neg \left(y \le 3.568984011627691222092762646146063289201 \cdot 10^{-189}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r649542 = x;
double r649543 = y;
double r649544 = z;
double r649545 = t;
double r649546 = r649544 - r649545;
double r649547 = a;
double r649548 = r649547 - r649545;
double r649549 = r649546 / r649548;
double r649550 = r649543 * r649549;
double r649551 = r649542 + r649550;
return r649551;
}
double f(double x, double y, double z, double t, double a) {
double r649552 = y;
double r649553 = -4.3053147673961933e-32;
bool r649554 = r649552 <= r649553;
double r649555 = 3.5689840116276912e-189;
bool r649556 = r649552 <= r649555;
double r649557 = !r649556;
bool r649558 = r649554 || r649557;
double r649559 = x;
double r649560 = z;
double r649561 = t;
double r649562 = r649560 - r649561;
double r649563 = a;
double r649564 = r649563 - r649561;
double r649565 = r649562 / r649564;
double r649566 = r649552 * r649565;
double r649567 = r649559 + r649566;
double r649568 = r649552 * r649562;
double r649569 = r649568 / r649564;
double r649570 = r649559 + r649569;
double r649571 = r649558 ? r649567 : r649570;
return r649571;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.5 |
|---|---|
| Target | 0.4 |
| Herbie | 0.6 |
if y < -4.3053147673961933e-32 or 3.5689840116276912e-189 < y Initial program 0.9
if -4.3053147673961933e-32 < y < 3.5689840116276912e-189Initial program 2.8
rmApplied associate-*r/0.2
Final simplification0.6
herbie shell --seed 2019322
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.50808486055124107e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.8944268627920891e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))