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 1.3494005157116993 \cdot 10^{294}\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 r311111 = x;
double r311112 = y;
double r311113 = z;
double r311114 = r311113 - r311111;
double r311115 = r311112 * r311114;
double r311116 = t;
double r311117 = r311115 / r311116;
double r311118 = r311111 + r311117;
return r311118;
}
double f(double x, double y, double z, double t) {
double r311119 = x;
double r311120 = y;
double r311121 = z;
double r311122 = r311121 - r311119;
double r311123 = r311120 * r311122;
double r311124 = t;
double r311125 = r311123 / r311124;
double r311126 = r311119 + r311125;
double r311127 = -inf.0;
bool r311128 = r311126 <= r311127;
double r311129 = 1.3494005157116993e+294;
bool r311130 = r311126 <= r311129;
double r311131 = !r311130;
bool r311132 = r311128 || r311131;
double r311133 = r311120 / r311124;
double r311134 = fma(r311133, r311122, r311119);
double r311135 = r311132 ? r311134 : r311126;
return r311135;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.5 |
|---|---|
| Target | 2.0 |
| Herbie | 0.9 |
if (+ x (/ (* y (- z x)) t)) < -inf.0 or 1.3494005157116993e+294 < (+ x (/ (* y (- z x)) t)) Initial program 56.0
Simplified0.9
if -inf.0 < (+ x (/ (* y (- z x)) t)) < 1.3494005157116993e+294Initial program 0.9
Final simplification0.9
herbie shell --seed 2020024 +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)))