x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;z \le -1.47437460621894122515597907358401131123 \cdot 10^{-73}:\\
\;\;\;\;\frac{y - x}{t} \cdot z + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y - x, \frac{z}{t}, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r431830 = x;
double r431831 = y;
double r431832 = r431831 - r431830;
double r431833 = z;
double r431834 = r431832 * r431833;
double r431835 = t;
double r431836 = r431834 / r431835;
double r431837 = r431830 + r431836;
return r431837;
}
double f(double x, double y, double z, double t) {
double r431838 = z;
double r431839 = -1.4743746062189412e-73;
bool r431840 = r431838 <= r431839;
double r431841 = y;
double r431842 = x;
double r431843 = r431841 - r431842;
double r431844 = t;
double r431845 = r431843 / r431844;
double r431846 = r431845 * r431838;
double r431847 = r431846 + r431842;
double r431848 = r431838 / r431844;
double r431849 = fma(r431843, r431848, r431842);
double r431850 = r431840 ? r431847 : r431849;
return r431850;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.4 |
|---|---|
| Target | 1.9 |
| Herbie | 1.8 |
if z < -1.4743746062189412e-73Initial program 11.2
Simplified2.7
rmApplied fma-udef2.7
Simplified2.1
if -1.4743746062189412e-73 < z Initial program 4.8
Simplified1.8
Final simplification1.8
herbie shell --seed 2019179 +o rules:numerics
(FPCore (x y z t)
:name "Numeric.Histogram:binBounds from Chart-1.5.3"
: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)))