x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;t \le -2.362884853252186351003430209899103823374 \cdot 10^{-200}:\\
\;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\
\mathbf{elif}\;t \le 8.698046239578131913729902310956849143645 \cdot 10^{-72}:\\
\;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\
\end{array}double f(double x, double y, double z, double t) {
double r217957 = x;
double r217958 = y;
double r217959 = r217958 - r217957;
double r217960 = z;
double r217961 = r217959 * r217960;
double r217962 = t;
double r217963 = r217961 / r217962;
double r217964 = r217957 + r217963;
return r217964;
}
double f(double x, double y, double z, double t) {
double r217965 = t;
double r217966 = -2.3628848532521864e-200;
bool r217967 = r217965 <= r217966;
double r217968 = x;
double r217969 = y;
double r217970 = r217969 - r217968;
double r217971 = z;
double r217972 = r217971 / r217965;
double r217973 = r217970 * r217972;
double r217974 = r217968 + r217973;
double r217975 = 8.698046239578132e-72;
bool r217976 = r217965 <= r217975;
double r217977 = r217970 * r217971;
double r217978 = r217977 / r217965;
double r217979 = r217968 + r217978;
double r217980 = r217965 / r217971;
double r217981 = r217970 / r217980;
double r217982 = r217968 + r217981;
double r217983 = r217976 ? r217979 : r217982;
double r217984 = r217967 ? r217974 : r217983;
return r217984;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.4 |
|---|---|
| Target | 2.1 |
| Herbie | 1.6 |
if t < -2.3628848532521864e-200Initial program 7.1
rmApplied *-un-lft-identity7.1
Applied times-frac1.6
Simplified1.6
if -2.3628848532521864e-200 < t < 8.698046239578132e-72Initial program 2.7
if 8.698046239578132e-72 < t Initial program 7.5
rmApplied associate-/l*1.1
Final simplification1.6
herbie shell --seed 2019322 +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)))