x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -3.924024237876823705783609140341883486631 \cdot 10^{-14}:\\
\;\;\;\;y \cdot \frac{z - t}{a} + x\\
\mathbf{elif}\;a \le 1.875486532986730162660285871460922359099 \cdot 10^{-85}:\\
\;\;\;\;x + \frac{1}{\frac{a}{y \cdot \left(z - t\right)}}\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{z - t}{a} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r15829299 = x;
double r15829300 = y;
double r15829301 = z;
double r15829302 = t;
double r15829303 = r15829301 - r15829302;
double r15829304 = r15829300 * r15829303;
double r15829305 = a;
double r15829306 = r15829304 / r15829305;
double r15829307 = r15829299 + r15829306;
return r15829307;
}
double f(double x, double y, double z, double t, double a) {
double r15829308 = a;
double r15829309 = -3.924024237876824e-14;
bool r15829310 = r15829308 <= r15829309;
double r15829311 = y;
double r15829312 = z;
double r15829313 = t;
double r15829314 = r15829312 - r15829313;
double r15829315 = r15829314 / r15829308;
double r15829316 = r15829311 * r15829315;
double r15829317 = x;
double r15829318 = r15829316 + r15829317;
double r15829319 = 1.8754865329867302e-85;
bool r15829320 = r15829308 <= r15829319;
double r15829321 = 1.0;
double r15829322 = r15829311 * r15829314;
double r15829323 = r15829308 / r15829322;
double r15829324 = r15829321 / r15829323;
double r15829325 = r15829317 + r15829324;
double r15829326 = r15829320 ? r15829325 : r15829318;
double r15829327 = r15829310 ? r15829318 : r15829326;
return r15829327;
}




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 a < -3.924024237876824e-14 or 1.8754865329867302e-85 < a Initial program 8.1
Taylor expanded around 0 8.1
Simplified2.0
Taylor expanded around 0 8.1
Simplified1.0
if -3.924024237876824e-14 < a < 1.8754865329867302e-85Initial program 0.9
rmApplied clear-num1.0
Final simplification1.0
herbie shell --seed 2019172
(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)))