x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a} \le -8.981442880940557861413613942616636285951 \cdot 10^{292} \lor \neg \left(\frac{y \cdot \left(z - t\right)}{a} \le 8.973171892835292774846855805866219421622 \cdot 10^{305}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, t - z, 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 r309127 = x;
double r309128 = y;
double r309129 = z;
double r309130 = t;
double r309131 = r309129 - r309130;
double r309132 = r309128 * r309131;
double r309133 = a;
double r309134 = r309132 / r309133;
double r309135 = r309127 - r309134;
return r309135;
}
double f(double x, double y, double z, double t, double a) {
double r309136 = y;
double r309137 = z;
double r309138 = t;
double r309139 = r309137 - r309138;
double r309140 = r309136 * r309139;
double r309141 = a;
double r309142 = r309140 / r309141;
double r309143 = -8.981442880940558e+292;
bool r309144 = r309142 <= r309143;
double r309145 = 8.973171892835293e+305;
bool r309146 = r309142 <= r309145;
double r309147 = !r309146;
bool r309148 = r309144 || r309147;
double r309149 = r309136 / r309141;
double r309150 = r309138 - r309137;
double r309151 = x;
double r309152 = fma(r309149, r309150, r309151);
double r309153 = r309151 - r309142;
double r309154 = r309148 ? r309152 : r309153;
return r309154;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.5 |
|---|---|
| Target | 0.7 |
| Herbie | 0.4 |
if (/ (* y (- z t)) a) < -8.981442880940558e+292 or 8.973171892835293e+305 < (/ (* y (- z t)) a) Initial program 57.8
Simplified1.0
if -8.981442880940558e+292 < (/ (* y (- z t)) a) < 8.973171892835293e+305Initial program 0.4
Final simplification0.4
herbie shell --seed 2019353 +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)))