x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;z \le -4.98598492962298202 \cdot 10^{-158} \lor \neg \left(z \le 6.9390753974297484 \cdot 10^{-149}\right):\\
\;\;\;\;\left(t - z\right) \cdot \frac{y}{a} + x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{a}{t - z}}, y, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r311347 = x;
double r311348 = y;
double r311349 = z;
double r311350 = t;
double r311351 = r311349 - r311350;
double r311352 = r311348 * r311351;
double r311353 = a;
double r311354 = r311352 / r311353;
double r311355 = r311347 - r311354;
return r311355;
}
double f(double x, double y, double z, double t, double a) {
double r311356 = z;
double r311357 = -4.985984929622982e-158;
bool r311358 = r311356 <= r311357;
double r311359 = 6.939075397429748e-149;
bool r311360 = r311356 <= r311359;
double r311361 = !r311360;
bool r311362 = r311358 || r311361;
double r311363 = t;
double r311364 = r311363 - r311356;
double r311365 = y;
double r311366 = a;
double r311367 = r311365 / r311366;
double r311368 = r311364 * r311367;
double r311369 = x;
double r311370 = r311368 + r311369;
double r311371 = 1.0;
double r311372 = r311366 / r311364;
double r311373 = r311371 / r311372;
double r311374 = fma(r311373, r311365, r311369);
double r311375 = r311362 ? r311370 : r311374;
return r311375;
}




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 | 2.6 |
if z < -4.985984929622982e-158 or 6.939075397429748e-149 < z Initial program 6.9
Simplified6.6
rmApplied clear-num6.6
rmApplied fma-udef6.6
Simplified2.1
if -4.985984929622982e-158 < z < 6.939075397429748e-149Initial program 4.2
Simplified3.7
rmApplied clear-num3.8
Final simplification2.6
herbie shell --seed 2020047 +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)))