x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{y \cdot \left(z - x\right)}{t} \le 8.98940625938930919 \cdot 10^{-113} \lor \neg \left(x + \frac{y \cdot \left(z - x\right)}{t} \le 1.0276911230637797 \cdot 10^{260}\right):\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - x\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r397255 = x;
double r397256 = y;
double r397257 = z;
double r397258 = r397257 - r397255;
double r397259 = r397256 * r397258;
double r397260 = t;
double r397261 = r397259 / r397260;
double r397262 = r397255 + r397261;
return r397262;
}
double f(double x, double y, double z, double t) {
double r397263 = x;
double r397264 = y;
double r397265 = z;
double r397266 = r397265 - r397263;
double r397267 = r397264 * r397266;
double r397268 = t;
double r397269 = r397267 / r397268;
double r397270 = r397263 + r397269;
double r397271 = 8.989406259389309e-113;
bool r397272 = r397270 <= r397271;
double r397273 = 1.0276911230637797e+260;
bool r397274 = r397270 <= r397273;
double r397275 = !r397274;
bool r397276 = r397272 || r397275;
double r397277 = r397264 / r397268;
double r397278 = fma(r397277, r397266, r397263);
double r397279 = r397276 ? r397278 : r397270;
return r397279;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.4 |
|---|---|
| Target | 2.2 |
| Herbie | 1.6 |
if (+ x (/ (* y (- z x)) t)) < 8.989406259389309e-113 or 1.0276911230637797e+260 < (+ x (/ (* y (- z x)) t)) Initial program 9.6
Simplified2.4
if 8.989406259389309e-113 < (+ x (/ (* y (- z x)) t)) < 1.0276911230637797e+260Initial program 0.2
Final simplification1.6
herbie shell --seed 2020020 +o rules:numerics
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:precision binary64
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))