x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} \le -1.24776180719115646 \cdot 10^{274}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y - x, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le -1.58966566023791801 \cdot 10^{-168}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 1.17692352051271372 \cdot 10^{-136}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{t}{y - x}}, z, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{z}{t}, y - x, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r452760 = x;
double r452761 = y;
double r452762 = r452761 - r452760;
double r452763 = z;
double r452764 = r452762 * r452763;
double r452765 = t;
double r452766 = r452764 / r452765;
double r452767 = r452760 + r452766;
return r452767;
}
double f(double x, double y, double z, double t) {
double r452768 = x;
double r452769 = y;
double r452770 = r452769 - r452768;
double r452771 = z;
double r452772 = r452770 * r452771;
double r452773 = t;
double r452774 = r452772 / r452773;
double r452775 = r452768 + r452774;
double r452776 = -1.2477618071911565e+274;
bool r452777 = r452775 <= r452776;
double r452778 = r452771 / r452773;
double r452779 = fma(r452778, r452770, r452768);
double r452780 = -1.589665660237918e-168;
bool r452781 = r452775 <= r452780;
double r452782 = 1.1769235205127137e-136;
bool r452783 = r452775 <= r452782;
double r452784 = 1.0;
double r452785 = r452773 / r452770;
double r452786 = r452784 / r452785;
double r452787 = fma(r452786, r452771, r452768);
double r452788 = r452783 ? r452787 : r452779;
double r452789 = r452781 ? r452775 : r452788;
double r452790 = r452777 ? r452779 : r452789;
return r452790;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.6 |
|---|---|
| Target | 1.9 |
| Herbie | 1.4 |
if (+ x (/ (* (- y x) z) t)) < -1.2477618071911565e+274 or 1.1769235205127137e-136 < (+ x (/ (* (- y x) z) t)) Initial program 11.6
Simplified7.0
rmApplied add-cube-cbrt7.5
Applied associate-/r*7.5
Taylor expanded around 0 11.6
Simplified1.9
if -1.2477618071911565e+274 < (+ x (/ (* (- y x) z) t)) < -1.589665660237918e-168Initial program 0.4
if -1.589665660237918e-168 < (+ x (/ (* (- y x) z) t)) < 1.1769235205127137e-136Initial program 3.9
Simplified2.0
rmApplied clear-num2.2
Final simplification1.4
herbie shell --seed 2020018 +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)))