x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{y \cdot \left(z - x\right)}{t} = -\infty:\\
\;\;\;\;x + \frac{y}{\frac{t}{z - x}}\\
\mathbf{elif}\;x + \frac{y \cdot \left(z - x\right)}{t} \le 3.909385011385941616558339325394184542054 \cdot 10^{208}:\\
\;\;\;\;x + \frac{y \cdot \left(z - x\right)}{t}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z - x, x\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r307510 = x;
double r307511 = y;
double r307512 = z;
double r307513 = r307512 - r307510;
double r307514 = r307511 * r307513;
double r307515 = t;
double r307516 = r307514 / r307515;
double r307517 = r307510 + r307516;
return r307517;
}
double f(double x, double y, double z, double t) {
double r307518 = x;
double r307519 = y;
double r307520 = z;
double r307521 = r307520 - r307518;
double r307522 = r307519 * r307521;
double r307523 = t;
double r307524 = r307522 / r307523;
double r307525 = r307518 + r307524;
double r307526 = -inf.0;
bool r307527 = r307525 <= r307526;
double r307528 = r307523 / r307521;
double r307529 = r307519 / r307528;
double r307530 = r307518 + r307529;
double r307531 = 3.9093850113859416e+208;
bool r307532 = r307525 <= r307531;
double r307533 = r307519 / r307523;
double r307534 = fma(r307533, r307521, r307518);
double r307535 = r307532 ? r307525 : r307534;
double r307536 = r307527 ? r307530 : r307535;
return r307536;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
| Original | 6.5 |
|---|---|
| Target | 2.1 |
| Herbie | 1.2 |
if (+ x (/ (* y (- z x)) t)) < -inf.0Initial program 64.0
rmApplied associate-/l*0.2
if -inf.0 < (+ x (/ (* y (- z x)) t)) < 3.9093850113859416e+208Initial program 0.8
if 3.9093850113859416e+208 < (+ x (/ (* y (- z x)) t)) Initial program 20.1
Simplified3.7
Final simplification1.2
herbie shell --seed 2019353 +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)))