x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a} \le -9.58097381083328705154269126658672692522 \cdot 10^{81}:\\
\;\;\;\;\frac{t - z}{\frac{a}{y}} + x\\
\mathbf{elif}\;\frac{y \cdot \left(z - t\right)}{a} \le 4.84668724673702282414318349461758654708 \cdot 10^{282}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{t - z}{a}, y, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r194716 = x;
double r194717 = y;
double r194718 = z;
double r194719 = t;
double r194720 = r194718 - r194719;
double r194721 = r194717 * r194720;
double r194722 = a;
double r194723 = r194721 / r194722;
double r194724 = r194716 - r194723;
return r194724;
}
double f(double x, double y, double z, double t, double a) {
double r194725 = y;
double r194726 = z;
double r194727 = t;
double r194728 = r194726 - r194727;
double r194729 = r194725 * r194728;
double r194730 = a;
double r194731 = r194729 / r194730;
double r194732 = -9.580973810833287e+81;
bool r194733 = r194731 <= r194732;
double r194734 = r194727 - r194726;
double r194735 = r194730 / r194725;
double r194736 = r194734 / r194735;
double r194737 = x;
double r194738 = r194736 + r194737;
double r194739 = 4.846687246737023e+282;
bool r194740 = r194731 <= r194739;
double r194741 = r194737 - r194731;
double r194742 = r194734 / r194730;
double r194743 = fma(r194742, r194725, r194737);
double r194744 = r194740 ? r194741 : r194743;
double r194745 = r194733 ? r194738 : r194744;
return r194745;
}




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.7 |
| Herbie | 1.4 |
if (/ (* y (- z t)) a) < -9.580973810833287e+81Initial program 14.7
Simplified3.6
rmApplied fma-udef3.6
Simplified3.2
if -9.580973810833287e+81 < (/ (* y (- z t)) a) < 4.846687246737023e+282Initial program 0.5
if 4.846687246737023e+282 < (/ (* y (- z t)) a) Initial program 50.7
Simplified1.0
Taylor expanded around 0 50.7
Simplified7.5
Final simplification1.4
herbie shell --seed 2019208 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
:precision binary64
:herbie-target
(if (< y -1.07612662163899753e-10) (- x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.8944268627920891e-49) (- x (/ (* y (- z t)) a)) (- x (/ y (/ a (- z t))))))
(- x (/ (* y (- z t)) a)))