x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;\left(z - t\right) \cdot y \le -2.77891878136361100181454115634670852188 \cdot 10^{145}:\\
\;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\
\mathbf{elif}\;\left(z - t\right) \cdot y \le 2.770472112777995570095000450343623150183 \cdot 10^{157}:\\
\;\;\;\;\frac{1}{\frac{a}{\left(z - t\right) \cdot y}} + x\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{z}{a} - \frac{t}{a}\right) \cdot y\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r14736751 = x;
double r14736752 = y;
double r14736753 = z;
double r14736754 = t;
double r14736755 = r14736753 - r14736754;
double r14736756 = r14736752 * r14736755;
double r14736757 = a;
double r14736758 = r14736756 / r14736757;
double r14736759 = r14736751 + r14736758;
return r14736759;
}
double f(double x, double y, double z, double t, double a) {
double r14736760 = z;
double r14736761 = t;
double r14736762 = r14736760 - r14736761;
double r14736763 = y;
double r14736764 = r14736762 * r14736763;
double r14736765 = -2.778918781363611e+145;
bool r14736766 = r14736764 <= r14736765;
double r14736767 = x;
double r14736768 = a;
double r14736769 = r14736760 / r14736768;
double r14736770 = r14736761 / r14736768;
double r14736771 = r14736769 - r14736770;
double r14736772 = r14736771 * r14736763;
double r14736773 = r14736767 + r14736772;
double r14736774 = 2.7704721127779956e+157;
bool r14736775 = r14736764 <= r14736774;
double r14736776 = 1.0;
double r14736777 = r14736768 / r14736764;
double r14736778 = r14736776 / r14736777;
double r14736779 = r14736778 + r14736767;
double r14736780 = r14736775 ? r14736779 : r14736773;
double r14736781 = r14736766 ? r14736773 : r14736780;
return r14736781;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 5.9 |
|---|---|
| Target | 0.8 |
| Herbie | 1.0 |
if (* y (- z t)) < -2.778918781363611e+145 or 2.7704721127779956e+157 < (* y (- z t)) Initial program 20.3
Taylor expanded around 0 20.3
Simplified2.2
if -2.778918781363611e+145 < (* y (- z t)) < 2.7704721127779956e+157Initial program 0.5
rmApplied clear-num0.5
Final simplification1.0
herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
:herbie-target
(if (< y -1.0761266216389975e-10) (+ x (/ 1.0 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))
(+ x (/ (* y (- z t)) a)))