x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\
\;\;\;\;\frac{z}{\frac{t}{y - x}} + x\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le -8.5364205869367377 \cdot 10^{142}:\\
\;\;\;\;x + \left(\left(y - x\right) \cdot z\right) \cdot \frac{1}{t}\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 4.89281685888807661 \cdot 10^{-136}:\\
\;\;\;\;\frac{z}{\frac{t}{y - x}} + x\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 1.053801819903552 \cdot 10^{308}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;\frac{z}{\frac{t}{y - x}} + x\\
\end{array}double f(double x, double y, double z, double t) {
double r491860 = x;
double r491861 = y;
double r491862 = r491861 - r491860;
double r491863 = z;
double r491864 = r491862 * r491863;
double r491865 = t;
double r491866 = r491864 / r491865;
double r491867 = r491860 + r491866;
return r491867;
}
double f(double x, double y, double z, double t) {
double r491868 = x;
double r491869 = y;
double r491870 = r491869 - r491868;
double r491871 = z;
double r491872 = r491870 * r491871;
double r491873 = t;
double r491874 = r491872 / r491873;
double r491875 = r491868 + r491874;
double r491876 = -inf.0;
bool r491877 = r491875 <= r491876;
double r491878 = r491873 / r491870;
double r491879 = r491871 / r491878;
double r491880 = r491879 + r491868;
double r491881 = -8.536420586936738e+142;
bool r491882 = r491875 <= r491881;
double r491883 = 1.0;
double r491884 = r491883 / r491873;
double r491885 = r491872 * r491884;
double r491886 = r491868 + r491885;
double r491887 = 4.8928168588880766e-136;
bool r491888 = r491875 <= r491887;
double r491889 = 1.053801819903552e+308;
bool r491890 = r491875 <= r491889;
double r491891 = r491890 ? r491875 : r491880;
double r491892 = r491888 ? r491880 : r491891;
double r491893 = r491882 ? r491886 : r491892;
double r491894 = r491877 ? r491880 : r491893;
return r491894;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.6 |
|---|---|
| Target | 2.0 |
| Herbie | 1.0 |
if (+ x (/ (* (- y x) z) t)) < -inf.0 or -8.536420586936738e+142 < (+ x (/ (* (- y x) z) t)) < 4.8928168588880766e-136 or 1.053801819903552e+308 < (+ x (/ (* (- y x) z) t)) Initial program 14.3
Simplified1.9
rmApplied clear-num2.1
rmApplied fma-udef2.1
Simplified1.8
if -inf.0 < (+ x (/ (* (- y x) z) t)) < -8.536420586936738e+142Initial program 0.1
rmApplied div-inv0.2
if 4.8928168588880766e-136 < (+ x (/ (* (- y x) z) t)) < 1.053801819903552e+308Initial program 0.3
Final simplification1.0
herbie shell --seed 2020064 +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)))