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 r205991 = x;
double r205992 = y;
double r205993 = z;
double r205994 = t;
double r205995 = r205993 - r205994;
double r205996 = r205992 * r205995;
double r205997 = a;
double r205998 = r205996 / r205997;
double r205999 = r205991 + r205998;
return r205999;
}
double f(double x, double y, double z, double t, double a) {
double r206000 = y;
double r206001 = z;
double r206002 = t;
double r206003 = r206001 - r206002;
double r206004 = r206000 * r206003;
double r206005 = a;
double r206006 = r206004 / r206005;
double r206007 = -5.5621956809643025e+178;
bool r206008 = r206006 <= r206007;
double r206009 = 1.9891577630354806e+111;
bool r206010 = r206006 <= r206009;
double r206011 = !r206010;
bool r206012 = r206008 || r206011;
double r206013 = r206000 / r206005;
double r206014 = x;
double r206015 = fma(r206013, r206003, r206014);
double r206016 = r206014 + r206006;
double r206017 = r206012 ? r206015 : r206016;
return r206017;
}




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