x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty \lor \neg \left(x + \frac{\left(y - x\right) \cdot z}{t} \le 4.21688783645265377 \cdot 10^{-84}\right):\\
\;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r464438 = x;
double r464439 = y;
double r464440 = r464439 - r464438;
double r464441 = z;
double r464442 = r464440 * r464441;
double r464443 = t;
double r464444 = r464442 / r464443;
double r464445 = r464438 + r464444;
return r464445;
}
double f(double x, double y, double z, double t) {
double r464446 = x;
double r464447 = y;
double r464448 = r464447 - r464446;
double r464449 = z;
double r464450 = r464448 * r464449;
double r464451 = t;
double r464452 = r464450 / r464451;
double r464453 = r464446 + r464452;
double r464454 = -inf.0;
bool r464455 = r464453 <= r464454;
double r464456 = 4.216887836452654e-84;
bool r464457 = r464453 <= r464456;
double r464458 = !r464457;
bool r464459 = r464455 || r464458;
double r464460 = r464451 / r464449;
double r464461 = r464448 / r464460;
double r464462 = r464446 + r464461;
double r464463 = r464459 ? r464462 : r464453;
return r464463;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.2 |
|---|---|
| Target | 2.0 |
| Herbie | 1.0 |
if (+ x (/ (* (- y x) z) t)) < -inf.0 or 4.216887836452654e-84 < (+ x (/ (* (- y x) z) t)) Initial program 12.8
rmApplied associate-/l*1.4
if -inf.0 < (+ x (/ (* (- y x) z) t)) < 4.216887836452654e-84Initial program 0.7
Final simplification1.0
herbie shell --seed 2020046 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< x -9.025511195533005e-135) (- x (* (/ z t) (- x y))) (if (< x 4.275032163700715e-250) (+ x (* (/ (- y x) t) z)) (+ x (/ (- y x) (/ t z)))))
(+ x (/ (* (- y x) z) t)))