x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) = -\infty \lor \neg \left(y \cdot \left(z - t\right) \le 1.4362507429651844 \cdot 10^{239}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, z - t, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r391795 = x;
double r391796 = y;
double r391797 = z;
double r391798 = t;
double r391799 = r391797 - r391798;
double r391800 = r391796 * r391799;
double r391801 = a;
double r391802 = r391800 / r391801;
double r391803 = r391795 + r391802;
return r391803;
}
double f(double x, double y, double z, double t, double a) {
double r391804 = y;
double r391805 = z;
double r391806 = t;
double r391807 = r391805 - r391806;
double r391808 = r391804 * r391807;
double r391809 = -inf.0;
bool r391810 = r391808 <= r391809;
double r391811 = 1.4362507429651844e+239;
bool r391812 = r391808 <= r391811;
double r391813 = !r391812;
bool r391814 = r391810 || r391813;
double r391815 = a;
double r391816 = r391804 / r391815;
double r391817 = x;
double r391818 = fma(r391816, r391807, r391817);
double r391819 = r391808 / r391815;
double r391820 = r391817 + r391819;
double r391821 = r391814 ? r391818 : r391820;
return r391821;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.2 |
|---|---|
| Target | 0.6 |
| Herbie | 0.3 |
if (* y (- z t)) < -inf.0 or 1.4362507429651844e+239 < (* y (- z t)) Initial program 47.6
Simplified0.3
if -inf.0 < (* y (- z t)) < 1.4362507429651844e+239Initial program 0.4
Final simplification0.3
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
:precision binary64
:herbie-target
(if (< y -1.0761266216389975e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))
(+ x (/ (* y (- z t)) a)))