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{1}{\frac{t}{y - x}}, z, x\right)\\
\mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 1.812525037796768018373255724443839618269 \cdot 10^{293}:\\
\;\;\;\;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 r263975 = x;
double r263976 = y;
double r263977 = r263976 - r263975;
double r263978 = z;
double r263979 = r263977 * r263978;
double r263980 = t;
double r263981 = r263979 / r263980;
double r263982 = r263975 + r263981;
return r263982;
}
double f(double x, double y, double z, double t) {
double r263983 = x;
double r263984 = y;
double r263985 = r263984 - r263983;
double r263986 = z;
double r263987 = r263985 * r263986;
double r263988 = t;
double r263989 = r263987 / r263988;
double r263990 = r263983 + r263989;
double r263991 = -inf.0;
bool r263992 = r263990 <= r263991;
double r263993 = 1.0;
double r263994 = r263988 / r263985;
double r263995 = r263993 / r263994;
double r263996 = fma(r263995, r263986, r263983);
double r263997 = 1.812525037796768e+293;
bool r263998 = r263990 <= r263997;
double r263999 = r263986 / r263988;
double r264000 = r263985 * r263999;
double r264001 = r263983 + r264000;
double r264002 = r263998 ? r263990 : r264001;
double r264003 = r263992 ? r263996 : r264002;
return r264003;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.5 |
|---|---|
| Target | 1.9 |
| Herbie | 0.8 |
if (+ x (/ (* (- y x) z) t)) < -inf.0Initial program 64.0
Simplified0.2
rmApplied clear-num0.2
if -inf.0 < (+ x (/ (* (- y x) z) t)) < 1.812525037796768e+293Initial program 0.8
if 1.812525037796768e+293 < (+ x (/ (* (- y x) z) t)) Initial program 50.1
rmApplied *-un-lft-identity50.1
Applied times-frac2.2
Simplified2.2
Final simplification0.8
herbie shell --seed 2019304 +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)))