x + \frac{y \cdot \left(z - x\right)}{t}\begin{array}{l}
\mathbf{if}\;t \le -1.61770217190675352 \cdot 10^{36} \lor \neg \left(t \le 2.9560956140306957 \cdot 10^{26}\right):\\
\;\;\;\;x + \frac{z - x}{\frac{t}{y}}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{z \cdot y}{t} - \frac{x \cdot y}{t}\right)\\
\end{array}double f(double x, double y, double z, double t) {
double r573749 = x;
double r573750 = y;
double r573751 = z;
double r573752 = r573751 - r573749;
double r573753 = r573750 * r573752;
double r573754 = t;
double r573755 = r573753 / r573754;
double r573756 = r573749 + r573755;
return r573756;
}
double f(double x, double y, double z, double t) {
double r573757 = t;
double r573758 = -1.6177021719067535e+36;
bool r573759 = r573757 <= r573758;
double r573760 = 2.9560956140306957e+26;
bool r573761 = r573757 <= r573760;
double r573762 = !r573761;
bool r573763 = r573759 || r573762;
double r573764 = x;
double r573765 = z;
double r573766 = r573765 - r573764;
double r573767 = y;
double r573768 = r573757 / r573767;
double r573769 = r573766 / r573768;
double r573770 = r573764 + r573769;
double r573771 = r573765 * r573767;
double r573772 = r573771 / r573757;
double r573773 = r573764 * r573767;
double r573774 = r573773 / r573757;
double r573775 = r573772 - r573774;
double r573776 = r573764 + r573775;
double r573777 = r573763 ? r573770 : r573776;
return r573777;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 6.5 |
|---|---|
| Target | 2.2 |
| Herbie | 1.5 |
if t < -1.6177021719067535e+36 or 2.9560956140306957e+26 < t Initial program 10.2
Taylor expanded around 0 10.2
Simplified1.3
if -1.6177021719067535e+36 < t < 2.9560956140306957e+26Initial program 1.8
Taylor expanded around 0 1.8
Simplified3.2
rmApplied div-sub3.2
Simplified4.1
Simplified1.8
Final simplification1.5
herbie shell --seed 2020042
(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)))