x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \cdot \left(z - t\right) \le -1.247620159404664309930925189564717520917 \cdot 10^{220} \lor \neg \left(y \cdot \left(z - t\right) \le 3.684420206893129511608175584226867275509 \cdot 10^{217}\right):\\
\;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\
\mathbf{else}:\\
\;\;\;\;x + \left(y \cdot \left(z - t\right)\right) \cdot \frac{1}{a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r344387 = x;
double r344388 = y;
double r344389 = z;
double r344390 = t;
double r344391 = r344389 - r344390;
double r344392 = r344388 * r344391;
double r344393 = a;
double r344394 = r344392 / r344393;
double r344395 = r344387 + r344394;
return r344395;
}
double f(double x, double y, double z, double t, double a) {
double r344396 = y;
double r344397 = z;
double r344398 = t;
double r344399 = r344397 - r344398;
double r344400 = r344396 * r344399;
double r344401 = -1.2476201594046643e+220;
bool r344402 = r344400 <= r344401;
double r344403 = 3.6844202068931295e+217;
bool r344404 = r344400 <= r344403;
double r344405 = !r344404;
bool r344406 = r344402 || r344405;
double r344407 = x;
double r344408 = a;
double r344409 = r344408 / r344399;
double r344410 = r344396 / r344409;
double r344411 = r344407 + r344410;
double r344412 = 1.0;
double r344413 = r344412 / r344408;
double r344414 = r344400 * r344413;
double r344415 = r344407 + r344414;
double r344416 = r344406 ? r344411 : r344415;
return r344416;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 6.1 |
|---|---|
| Target | 0.7 |
| Herbie | 0.5 |
if (* y (- z t)) < -1.2476201594046643e+220 or 3.6844202068931295e+217 < (* y (- z t)) Initial program 31.5
rmApplied associate-/l*0.9
if -1.2476201594046643e+220 < (* y (- z t)) < 3.6844202068931295e+217Initial program 0.4
rmApplied div-inv0.4
Final simplification0.5
herbie shell --seed 2019303
(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)))