x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t} - \frac{x}{t}, z, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 4.84668724673702282414318349461758654708 \cdot 10^{282}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r432512 = x;
double r432513 = y;
double r432514 = r432513 - r432512;
double r432515 = z;
double r432516 = r432514 * r432515;
double r432517 = t;
double r432518 = r432516 / r432517;
double r432519 = r432512 + r432518;
return r432519;
}
double f(double x, double y, double z, double t) {
double r432520 = x;
double r432521 = y;
double r432522 = r432521 - r432520;
double r432523 = z;
double r432524 = r432522 * r432523;
double r432525 = t;
double r432526 = r432524 / r432525;
double r432527 = r432520 + r432526;
double r432528 = -inf.0;
bool r432529 = r432527 <= r432528;
double r432530 = r432521 / r432525;
double r432531 = r432520 / r432525;
double r432532 = r432530 - r432531;
double r432533 = fma(r432532, r432523, r432520);
double r432534 = 4.846687246737023e+282;
bool r432535 = r432527 <= r432534;
double r432536 = r432523 / r432525;
double r432537 = r432522 * r432536;
double r432538 = r432520 + r432537;
double r432539 = r432535 ? r432527 : r432538;
double r432540 = r432529 ? r432533 : r432539;
return r432540;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 2.0 |
| Herbie | 0.8 |
if (+ x (/ (* (- y x) z) t)) < -inf.0Initial program 64.0
Simplified0.2
rmApplied div-sub0.2
if -inf.0 < (+ x (/ (* (- y x) z) t)) < 4.846687246737023e+282Initial program 0.7
if 4.846687246737023e+282 < (+ x (/ (* (- y x) z) t)) Initial program 42.0
rmApplied *-un-lft-identity42.0
Applied times-frac1.7
Simplified1.7
Final simplification0.8
herbie shell --seed 2019208 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
:precision binary64
:herbie-target
(if (< x -9.0255111955330046e-135) (- x (* (/ z t) (- x y))) (if (< x 4.2750321637007147e-250) (+ x (* (/ (- y x) t) z)) (+ x (/ (- y x) (/ t z)))))
(+ x (/ (* (- y x) z) t)))