x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{y \cdot \left(z - x\right)}{t} = -\infty \lor \neg \left(x + \frac{y \cdot \left(z - x\right)}{t} \le 3.35127994072859967 \cdot 10^{271}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - x\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r316805 = x;
double r316806 = y;
double r316807 = z;
double r316808 = r316807 - r316805;
double r316809 = r316806 * r316808;
double r316810 = t;
double r316811 = r316809 / r316810;
double r316812 = r316805 + r316811;
return r316812;
}
double f(double x, double y, double z, double t) {
double r316813 = x;
double r316814 = y;
double r316815 = z;
double r316816 = r316815 - r316813;
double r316817 = r316814 * r316816;
double r316818 = t;
double r316819 = r316817 / r316818;
double r316820 = r316813 + r316819;
double r316821 = -inf.0;
bool r316822 = r316820 <= r316821;
double r316823 = 3.3512799407285997e+271;
bool r316824 = r316820 <= r316823;
double r316825 = !r316824;
bool r316826 = r316822 || r316825;
double r316827 = r316814 / r316818;
double r316828 = fma(r316827, r316816, r316813);
double r316829 = r316826 ? r316828 : r316820;
return r316829;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.6 |
|---|---|
| Target | 2.1 |
| Herbie | 0.9 |
if (+ x (/ (* y (- z x)) t)) < -inf.0 or 3.3512799407285997e+271 < (+ x (/ (* y (- z x)) t)) Initial program 45.4
Simplified1.6
if -inf.0 < (+ x (/ (* y (- z x)) t)) < 3.3512799407285997e+271Initial program 0.8
Final simplification0.9
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:precision binary64
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))