x + \left(y - x\right) \cdot \frac{z}{t}\begin{array}{l}
\mathbf{if}\;x \le -1.259739101522575668784251679852767179672 \cdot 10^{-239}:\\
\;\;\;\;x + \frac{z}{t} \cdot \left(y - x\right)\\
\mathbf{elif}\;x \le 6.335866332063525055695365870190246743303 \cdot 10^{-193}:\\
\;\;\;\;\frac{\left(y - x\right) \cdot z}{t} + x\\
\mathbf{else}:\\
\;\;\;\;x + \frac{z}{t} \cdot \left(y - x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r28787527 = x;
double r28787528 = y;
double r28787529 = r28787528 - r28787527;
double r28787530 = z;
double r28787531 = t;
double r28787532 = r28787530 / r28787531;
double r28787533 = r28787529 * r28787532;
double r28787534 = r28787527 + r28787533;
return r28787534;
}
double f(double x, double y, double z, double t) {
double r28787535 = x;
double r28787536 = -1.2597391015225757e-239;
bool r28787537 = r28787535 <= r28787536;
double r28787538 = z;
double r28787539 = t;
double r28787540 = r28787538 / r28787539;
double r28787541 = y;
double r28787542 = r28787541 - r28787535;
double r28787543 = r28787540 * r28787542;
double r28787544 = r28787535 + r28787543;
double r28787545 = 6.335866332063525e-193;
bool r28787546 = r28787535 <= r28787545;
double r28787547 = r28787542 * r28787538;
double r28787548 = r28787547 / r28787539;
double r28787549 = r28787548 + r28787535;
double r28787550 = r28787546 ? r28787549 : r28787544;
double r28787551 = r28787537 ? r28787544 : r28787550;
return r28787551;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.1 |
|---|---|
| Target | 2.3 |
| Herbie | 2.2 |
if x < -1.2597391015225757e-239 or 6.335866332063525e-193 < x Initial program 1.5
if -1.2597391015225757e-239 < x < 6.335866332063525e-193Initial program 5.6
rmApplied associate-*r/6.0
Final simplification2.2
herbie shell --seed 2019170
(FPCore (x y z t)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:tickPosition from plot-0.2.3.4"
:herbie-target
(if (< (* (- y x) (/ z t)) -1013646692435.8867) (+ x (/ (- y x) (/ t z))) (if (< (* (- y x) (/ z t)) -0.0) (+ x (/ (* (- y x) z) t)) (+ x (/ (- y x) (/ t z)))))
(+ x (* (- y x) (/ z t))))