x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -5.386011167286209797538090785742809716412 \cdot 10^{-28} \lor \neg \left(a \le 4635323820368954973487104\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{a}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot z + y \cdot \left(-t\right)}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r285304 = x;
double r285305 = y;
double r285306 = z;
double r285307 = t;
double r285308 = r285306 - r285307;
double r285309 = r285305 * r285308;
double r285310 = a;
double r285311 = r285309 / r285310;
double r285312 = r285304 + r285311;
return r285312;
}
double f(double x, double y, double z, double t, double a) {
double r285313 = a;
double r285314 = -5.38601116728621e-28;
bool r285315 = r285313 <= r285314;
double r285316 = 4.635323820368955e+24;
bool r285317 = r285313 <= r285316;
double r285318 = !r285317;
bool r285319 = r285315 || r285318;
double r285320 = x;
double r285321 = y;
double r285322 = z;
double r285323 = t;
double r285324 = r285322 - r285323;
double r285325 = r285324 / r285313;
double r285326 = r285321 * r285325;
double r285327 = r285320 + r285326;
double r285328 = r285321 * r285322;
double r285329 = -r285323;
double r285330 = r285321 * r285329;
double r285331 = r285328 + r285330;
double r285332 = r285331 / r285313;
double r285333 = r285320 + r285332;
double r285334 = r285319 ? r285327 : r285333;
return r285334;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 6.3 |
|---|---|
| Target | 0.6 |
| Herbie | 0.6 |
if a < -5.38601116728621e-28 or 4.635323820368955e+24 < a Initial program 9.8
rmApplied *-un-lft-identity9.8
Applied times-frac0.6
Simplified0.6
if -5.38601116728621e-28 < a < 4.635323820368955e+24Initial program 0.6
rmApplied sub-neg0.6
Applied distribute-lft-in0.6
Final simplification0.6
herbie shell --seed 2019322
(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)))