x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) \le -2.035064490176370167637368676280506465886 \cdot 10^{200}:\\
\;\;\;\;\frac{t - z}{\frac{a}{y}} + x\\
\mathbf{elif}\;y \cdot \left(z - t\right) \le 2.143948490603520686127081681315653192418 \cdot 10^{204}:\\
\;\;\;\;x - \frac{y \cdot \left(z - t\right)}{a}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r254319 = x;
double r254320 = y;
double r254321 = z;
double r254322 = t;
double r254323 = r254321 - r254322;
double r254324 = r254320 * r254323;
double r254325 = a;
double r254326 = r254324 / r254325;
double r254327 = r254319 - r254326;
return r254327;
}
double f(double x, double y, double z, double t, double a) {
double r254328 = y;
double r254329 = z;
double r254330 = t;
double r254331 = r254329 - r254330;
double r254332 = r254328 * r254331;
double r254333 = -2.03506449017637e+200;
bool r254334 = r254332 <= r254333;
double r254335 = r254330 - r254329;
double r254336 = a;
double r254337 = r254336 / r254328;
double r254338 = r254335 / r254337;
double r254339 = x;
double r254340 = r254338 + r254339;
double r254341 = 2.1439484906035207e+204;
bool r254342 = r254332 <= r254341;
double r254343 = r254332 / r254336;
double r254344 = r254339 - r254343;
double r254345 = r254328 / r254336;
double r254346 = fma(r254345, r254335, r254339);
double r254347 = r254342 ? r254344 : r254346;
double r254348 = r254334 ? r254340 : r254347;
return r254348;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.7 |
|---|---|
| Target | 0.7 |
| Herbie | 0.4 |
if (* y (- z t)) < -2.03506449017637e+200Initial program 30.1
Simplified0.5
rmApplied fma-udef0.5
Simplified0.5
if -2.03506449017637e+200 < (* y (- z t)) < 2.1439484906035207e+204Initial program 0.4
if 2.1439484906035207e+204 < (* y (- z t)) Initial program 31.6
Simplified0.5
Final simplification0.4
herbie shell --seed 2019209 +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)))