x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{a} = -\infty:\\
\;\;\;\;\frac{z}{\frac{a}{y}} - \left(\frac{t}{\frac{a}{y}} - x\right)\\
\mathbf{elif}\;\frac{y \cdot \left(z - t\right)}{a} \le 4.737630196529751538621117105919303400464 \cdot 10^{-50}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{z}{\frac{a}{y}} - \left(\frac{1}{\frac{\frac{a}{y}}{t}} - x\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r67180 = x;
double r67181 = y;
double r67182 = z;
double r67183 = t;
double r67184 = r67182 - r67183;
double r67185 = r67181 * r67184;
double r67186 = a;
double r67187 = r67185 / r67186;
double r67188 = r67180 + r67187;
return r67188;
}
double f(double x, double y, double z, double t, double a) {
double r67189 = y;
double r67190 = z;
double r67191 = t;
double r67192 = r67190 - r67191;
double r67193 = r67189 * r67192;
double r67194 = a;
double r67195 = r67193 / r67194;
double r67196 = -inf.0;
bool r67197 = r67195 <= r67196;
double r67198 = r67194 / r67189;
double r67199 = r67190 / r67198;
double r67200 = r67191 / r67198;
double r67201 = x;
double r67202 = r67200 - r67201;
double r67203 = r67199 - r67202;
double r67204 = 4.737630196529752e-50;
bool r67205 = r67195 <= r67204;
double r67206 = r67201 + r67195;
double r67207 = 1.0;
double r67208 = r67198 / r67191;
double r67209 = r67207 / r67208;
double r67210 = r67209 - r67201;
double r67211 = r67199 - r67210;
double r67212 = r67205 ? r67206 : r67211;
double r67213 = r67197 ? r67203 : r67212;
return r67213;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 6.5 |
|---|---|
| Target | 0.7 |
| Herbie | 1.0 |
if (/ (* y (- z t)) a) < -inf.0Initial program 64.0
Simplified0.2
rmApplied fma-udef0.2
Simplified0.2
rmApplied div-sub0.2
Applied associate-+l-0.2
if -inf.0 < (/ (* y (- z t)) a) < 4.737630196529752e-50Initial program 0.5
if 4.737630196529752e-50 < (/ (* y (- z t)) a) Initial program 0.2
Simplified3.0
rmApplied fma-udef3.0
Simplified2.8
rmApplied div-sub2.8
Applied associate-+l-2.8
rmApplied clear-num2.8
Final simplification1.0
herbie shell --seed 2019310 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
:precision binary64
:herbie-target
(if (< y -1.07612662163899753e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.8944268627920891e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))
(+ x (/ (* y (- z t)) a)))