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 r278407 = x;
double r278408 = y;
double r278409 = z;
double r278410 = t;
double r278411 = r278409 - r278410;
double r278412 = r278408 * r278411;
double r278413 = a;
double r278414 = r278412 / r278413;
double r278415 = r278407 - r278414;
return r278415;
}
double f(double x, double y, double z, double t, double a) {
double r278416 = a;
double r278417 = -9.123265245159162e-287;
bool r278418 = r278416 <= r278417;
double r278419 = y;
double r278420 = r278419 / r278416;
double r278421 = t;
double r278422 = z;
double r278423 = r278421 - r278422;
double r278424 = x;
double r278425 = fma(r278420, r278423, r278424);
double r278426 = 1.6097476229842367e+23;
bool r278427 = r278416 <= r278426;
double r278428 = 1.0;
double r278429 = r278422 - r278421;
double r278430 = r278419 * r278429;
double r278431 = r278416 / r278430;
double r278432 = r278428 / r278431;
double r278433 = r278424 - r278432;
double r278434 = sqrt(r278416);
double r278435 = r278419 / r278434;
double r278436 = r278429 / r278434;
double r278437 = r278435 * r278436;
double r278438 = r278424 - r278437;
double r278439 = r278427 ? r278433 : r278438;
double r278440 = r278418 ? r278425 : r278439;
return r278440;
}




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)))