x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) \le -4.51210365626401900297645952887463999678 \cdot 10^{201}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\mathbf{elif}\;y \cdot \left(z - t\right) \le 9.346814402829446941667508921526282193068 \cdot 10^{281}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\
\mathbf{else}:\\
\;\;\;\;x - \frac{z - t}{a} \cdot y\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r212932 = x;
double r212933 = y;
double r212934 = z;
double r212935 = t;
double r212936 = r212934 - r212935;
double r212937 = r212933 * r212936;
double r212938 = a;
double r212939 = r212937 / r212938;
double r212940 = r212932 - r212939;
return r212940;
}
double f(double x, double y, double z, double t, double a) {
double r212941 = y;
double r212942 = z;
double r212943 = t;
double r212944 = r212942 - r212943;
double r212945 = r212941 * r212944;
double r212946 = -4.512103656264019e+201;
bool r212947 = r212945 <= r212946;
double r212948 = a;
double r212949 = r212941 / r212948;
double r212950 = r212943 - r212942;
double r212951 = x;
double r212952 = fma(r212949, r212950, r212951);
double r212953 = 9.346814402829447e+281;
bool r212954 = r212945 <= r212953;
double r212955 = r212945 / r212948;
double r212956 = r212951 - r212955;
double r212957 = r212944 / r212948;
double r212958 = r212957 * r212941;
double r212959 = r212951 - r212958;
double r212960 = r212954 ? r212956 : r212959;
double r212961 = r212947 ? r212952 : r212960;
return r212961;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.0 |
|---|---|
| Target | 0.8 |
| Herbie | 0.4 |
if (* y (- z t)) < -4.512103656264019e+201Initial program 27.3
Simplified1.1
if -4.512103656264019e+201 < (* y (- z t)) < 9.346814402829447e+281Initial program 0.3
if 9.346814402829447e+281 < (* y (- z t)) Initial program 50.1
Taylor expanded around 0 50.1
Simplified0.2
Final simplification0.4
herbie shell --seed 2019306 +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)))