x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;z \le -1119936795932290973696:\\
\;\;\;\;\mathsf{fma}\left(\frac{y - x}{t}, z, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\
\end{array}double f(double x, double y, double z, double t) {
double r367384 = x;
double r367385 = y;
double r367386 = r367385 - r367384;
double r367387 = z;
double r367388 = r367386 * r367387;
double r367389 = t;
double r367390 = r367388 / r367389;
double r367391 = r367384 + r367390;
return r367391;
}
double f(double x, double y, double z, double t) {
double r367392 = z;
double r367393 = -1.119936795932291e+21;
bool r367394 = r367392 <= r367393;
double r367395 = y;
double r367396 = x;
double r367397 = r367395 - r367396;
double r367398 = t;
double r367399 = r367397 / r367398;
double r367400 = fma(r367399, r367392, r367396);
double r367401 = r367398 / r367392;
double r367402 = r367397 / r367401;
double r367403 = r367396 + r367402;
double r367404 = r367394 ? r367400 : r367403;
return r367404;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.2 |
|---|---|
| Target | 2.0 |
| Herbie | 1.7 |
if z < -1.119936795932291e+21Initial program 17.5
Simplified1.6
if -1.119936795932291e+21 < z Initial program 3.8
rmApplied associate-/l*1.7
Final simplification1.7
herbie shell --seed 2019350 +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)))