x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -9.123265245159162379441648817674026348617 \cdot 10^{-287}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\mathbf{elif}\;a \le 160974762298423667326976:\\
\;\;\;\;x - \frac{1}{\frac{a}{y \cdot \left(z - t\right)}}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{y}{\sqrt{a}} \cdot \frac{z - t}{\sqrt{a}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r307921 = x;
double r307922 = y;
double r307923 = z;
double r307924 = t;
double r307925 = r307923 - r307924;
double r307926 = r307922 * r307925;
double r307927 = a;
double r307928 = r307926 / r307927;
double r307929 = r307921 - r307928;
return r307929;
}
double f(double x, double y, double z, double t, double a) {
double r307930 = a;
double r307931 = -9.123265245159162e-287;
bool r307932 = r307930 <= r307931;
double r307933 = y;
double r307934 = r307933 / r307930;
double r307935 = t;
double r307936 = z;
double r307937 = r307935 - r307936;
double r307938 = x;
double r307939 = fma(r307934, r307937, r307938);
double r307940 = 1.6097476229842367e+23;
bool r307941 = r307930 <= r307940;
double r307942 = 1.0;
double r307943 = r307936 - r307935;
double r307944 = r307933 * r307943;
double r307945 = r307930 / r307944;
double r307946 = r307942 / r307945;
double r307947 = r307938 - r307946;
double r307948 = sqrt(r307930);
double r307949 = r307933 / r307948;
double r307950 = r307943 / r307948;
double r307951 = r307949 * r307950;
double r307952 = r307938 - r307951;
double r307953 = r307941 ? r307947 : r307952;
double r307954 = r307932 ? r307939 : r307953;
return r307954;
}




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 a < -9.123265245159162e-287Initial program 6.4
Simplified2.0
if -9.123265245159162e-287 < a < 1.6097476229842367e+23Initial program 1.0
rmApplied clear-num1.0
if 1.6097476229842367e+23 < a Initial program 10.0
rmApplied add-sqr-sqrt10.1
Applied times-frac0.7
Final simplification1.4
herbie shell --seed 2020001 +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.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)))