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 -2.12540069280457327 \cdot 10^{-224}\right):\\
\;\;\;\;\mathsf{fma}\left(y - x, \frac{z}{t}, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r444638 = x;
double r444639 = y;
double r444640 = r444639 - r444638;
double r444641 = z;
double r444642 = r444640 * r444641;
double r444643 = t;
double r444644 = r444642 / r444643;
double r444645 = r444638 + r444644;
return r444645;
}
double f(double x, double y, double z, double t) {
double r444646 = x;
double r444647 = y;
double r444648 = r444647 - r444646;
double r444649 = z;
double r444650 = r444648 * r444649;
double r444651 = t;
double r444652 = r444650 / r444651;
double r444653 = r444646 + r444652;
double r444654 = -inf.0;
bool r444655 = r444653 <= r444654;
double r444656 = -2.1254006928045733e-224;
bool r444657 = r444653 <= r444656;
double r444658 = !r444657;
bool r444659 = r444655 || r444658;
double r444660 = r444649 / r444651;
double r444661 = fma(r444648, r444660, r444646);
double r444662 = r444659 ? r444661 : r444653;
return r444662;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.1 |
|---|---|
| Target | 2.0 |
| Herbie | 1.3 |
if (+ x (/ (* (- y x) z) t)) < -inf.0 or -2.1254006928045733e-224 < (+ x (/ (* (- y x) z) t)) Initial program 10.4
Simplified5.6
rmApplied fma-udef5.6
rmApplied div-inv5.6
Applied associate-*l*2.0
Simplified2.0
rmApplied fma-def2.0
if -inf.0 < (+ x (/ (* (- y x) z) t)) < -2.1254006928045733e-224Initial program 0.4
Final simplification1.3
herbie shell --seed 2020089 +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)))