x + \frac{\left(y - x\right) \cdot z}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\
\;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\
\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 + \frac{z}{t} \cdot \left(y - x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r366646 = x;
double r366647 = y;
double r366648 = r366647 - r366646;
double r366649 = z;
double r366650 = r366648 * r366649;
double r366651 = t;
double r366652 = r366650 / r366651;
double r366653 = r366646 + r366652;
return r366653;
}
double f(double x, double y, double z, double t) {
double r366654 = x;
double r366655 = y;
double r366656 = r366655 - r366654;
double r366657 = z;
double r366658 = r366656 * r366657;
double r366659 = t;
double r366660 = r366658 / r366659;
double r366661 = r366654 + r366660;
double r366662 = -inf.0;
bool r366663 = r366661 <= r366662;
double r366664 = r366659 / r366657;
double r366665 = r366656 / r366664;
double r366666 = r366654 + r366665;
double r366667 = 1.812525037796768e+293;
bool r366668 = r366661 <= r366667;
double r366669 = r366657 / r366659;
double r366670 = r366669 * r366656;
double r366671 = r366654 + r366670;
double r366672 = r366668 ? r366661 : r366671;
double r366673 = r366663 ? r366666 : r366672;
return r366673;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.5 |
|---|---|
| Target | 1.9 |
| Herbie | 0.8 |
if (+ x (/ (* (- y x) z) t)) < -inf.0Initial program 64.0
rmApplied associate-/l*0.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 associate-/l*2.0
Taylor expanded around 0 50.1
Simplified2.2
Final simplification0.8
herbie shell --seed 2019304
(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)))