x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;x + \frac{y \cdot \left(z - x\right)}{t} = -\infty \lor \neg \left(x + \frac{y \cdot \left(z - x\right)}{t} \le 6.01396636564187938 \cdot 10^{302}\right):\\
\;\;\;\;x + \frac{y}{\frac{t}{z - x}}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(z - x\right)}{t}\\
\end{array}double f(double x, double y, double z, double t) {
double r248723 = x;
double r248724 = y;
double r248725 = z;
double r248726 = r248725 - r248723;
double r248727 = r248724 * r248726;
double r248728 = t;
double r248729 = r248727 / r248728;
double r248730 = r248723 + r248729;
return r248730;
}
double f(double x, double y, double z, double t) {
double r248731 = x;
double r248732 = y;
double r248733 = z;
double r248734 = r248733 - r248731;
double r248735 = r248732 * r248734;
double r248736 = t;
double r248737 = r248735 / r248736;
double r248738 = r248731 + r248737;
double r248739 = -inf.0;
bool r248740 = r248738 <= r248739;
double r248741 = 6.013966365641879e+302;
bool r248742 = r248738 <= r248741;
double r248743 = !r248742;
bool r248744 = r248740 || r248743;
double r248745 = r248736 / r248734;
double r248746 = r248732 / r248745;
double r248747 = r248731 + r248746;
double r248748 = r248744 ? r248747 : r248738;
return r248748;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.8 |
|---|---|
| Target | 2.2 |
| Herbie | 0.9 |
if (+ x (/ (* y (- z x)) t)) < -inf.0 or 6.013966365641879e+302 < (+ x (/ (* y (- z x)) t)) Initial program 60.8
rmApplied associate-/l*1.0
if -inf.0 < (+ x (/ (* y (- z x)) t)) < 6.013966365641879e+302Initial program 0.9
Final simplification0.9
herbie shell --seed 2019198 +o rules:numerics
(FPCore (x y z t)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"
:herbie-target
(- x (+ (* x (/ y t)) (* (- z) (/ y t))))
(+ x (/ (* y (- z x)) t)))