x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;z \le -5.3249082459376733 \cdot 10^{-158} \lor \neg \left(z \le 6.9390753974297484 \cdot 10^{-149}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, x\right)\\
\mathbf{else}:\\
\;\;\;\;x - y \cdot \frac{z - t}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r260459 = x;
double r260460 = y;
double r260461 = z;
double r260462 = t;
double r260463 = r260461 - r260462;
double r260464 = r260460 * r260463;
double r260465 = a;
double r260466 = r260464 / r260465;
double r260467 = r260459 - r260466;
return r260467;
}
double f(double x, double y, double z, double t, double a) {
double r260468 = z;
double r260469 = -5.324908245937673e-158;
bool r260470 = r260468 <= r260469;
double r260471 = 6.939075397429748e-149;
bool r260472 = r260468 <= r260471;
double r260473 = !r260472;
bool r260474 = r260470 || r260473;
double r260475 = y;
double r260476 = a;
double r260477 = r260475 / r260476;
double r260478 = t;
double r260479 = r260478 - r260468;
double r260480 = x;
double r260481 = fma(r260477, r260479, r260480);
double r260482 = r260468 - r260478;
double r260483 = r260482 / r260476;
double r260484 = r260475 * r260483;
double r260485 = r260480 - r260484;
double r260486 = r260474 ? r260481 : r260485;
return r260486;
}




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.5 |
if z < -5.324908245937673e-158 or 6.939075397429748e-149 < z Initial program 6.9
Simplified2.1
if -5.324908245937673e-158 < z < 6.939075397429748e-149Initial program 4.2
rmApplied *-un-lft-identity4.2
Applied times-frac3.7
Simplified3.7
Final simplification2.5
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)))