x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a} \le -5.562195680964302490149328614550000366002 \cdot 10^{178} \lor \neg \left(\frac{y \cdot \left(z - t\right)}{a} \le 1.989157763035480554275360497772684535848 \cdot 10^{111}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, z - t, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r185471 = x;
double r185472 = y;
double r185473 = z;
double r185474 = t;
double r185475 = r185473 - r185474;
double r185476 = r185472 * r185475;
double r185477 = a;
double r185478 = r185476 / r185477;
double r185479 = r185471 + r185478;
return r185479;
}
double f(double x, double y, double z, double t, double a) {
double r185480 = y;
double r185481 = z;
double r185482 = t;
double r185483 = r185481 - r185482;
double r185484 = r185480 * r185483;
double r185485 = a;
double r185486 = r185484 / r185485;
double r185487 = -5.5621956809643025e+178;
bool r185488 = r185486 <= r185487;
double r185489 = 1.9891577630354806e+111;
bool r185490 = r185486 <= r185489;
double r185491 = !r185490;
bool r185492 = r185488 || r185491;
double r185493 = r185480 / r185485;
double r185494 = x;
double r185495 = fma(r185493, r185483, r185494);
double r185496 = r185494 + r185486;
double r185497 = r185492 ? r185495 : r185496;
return r185497;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.1 |
|---|---|
| Target | 0.7 |
| Herbie | 1.4 |
if (/ (* y (- z t)) a) < -5.5621956809643025e+178 or 1.9891577630354806e+111 < (/ (* y (- z t)) a) Initial program 19.3
Simplified3.9
if -5.5621956809643025e+178 < (/ (* y (- z t)) a) < 1.9891577630354806e+111Initial program 0.4
Final simplification1.4
herbie shell --seed 2019303 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
: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)))