x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;z \le -4.01649379191452465 \cdot 10^{-92}:\\
\;\;\;\;\left(\left(y - x\right) \cdot \frac{1}{t}\right) \cdot z + x\\
\mathbf{else}:\\
\;\;\;\;\left(y - x\right) \cdot \frac{z}{t} + x\\
\end{array}double f(double x, double y, double z, double t) {
double r477473 = x;
double r477474 = y;
double r477475 = r477474 - r477473;
double r477476 = z;
double r477477 = r477475 * r477476;
double r477478 = t;
double r477479 = r477477 / r477478;
double r477480 = r477473 + r477479;
return r477480;
}
double f(double x, double y, double z, double t) {
double r477481 = z;
double r477482 = -4.0164937919145246e-92;
bool r477483 = r477481 <= r477482;
double r477484 = y;
double r477485 = x;
double r477486 = r477484 - r477485;
double r477487 = 1.0;
double r477488 = t;
double r477489 = r477487 / r477488;
double r477490 = r477486 * r477489;
double r477491 = r477490 * r477481;
double r477492 = r477491 + r477485;
double r477493 = r477481 / r477488;
double r477494 = r477486 * r477493;
double r477495 = r477494 + r477485;
double r477496 = r477483 ? r477492 : r477495;
return r477496;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.6 |
|---|---|
| Target | 2.2 |
| Herbie | 2.2 |
if z < -4.0164937919145246e-92Initial program 10.3
Simplified2.9
rmApplied fma-udef2.9
rmApplied div-inv2.9
if -4.0164937919145246e-92 < z Initial program 5.2
Simplified8.0
rmApplied fma-udef8.0
rmApplied div-inv8.1
Applied associate-*l*2.0
Simplified2.0
Final simplification2.2
herbie shell --seed 2020047 +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)))