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 r243500 = x;
double r243501 = y;
double r243502 = z;
double r243503 = t;
double r243504 = r243502 - r243503;
double r243505 = r243501 * r243504;
double r243506 = a;
double r243507 = r243505 / r243506;
double r243508 = r243500 + r243507;
return r243508;
}
double f(double x, double y, double z, double t, double a) {
double r243509 = y;
double r243510 = z;
double r243511 = t;
double r243512 = r243510 - r243511;
double r243513 = r243509 * r243512;
double r243514 = -1.2476201594046643e+220;
bool r243515 = r243513 <= r243514;
double r243516 = 3.6844202068931295e+217;
bool r243517 = r243513 <= r243516;
double r243518 = !r243517;
bool r243519 = r243515 || r243518;
double r243520 = x;
double r243521 = a;
double r243522 = r243521 / r243512;
double r243523 = r243509 / r243522;
double r243524 = r243520 + r243523;
double r243525 = 1.0;
double r243526 = r243525 / r243521;
double r243527 = r243513 * r243526;
double r243528 = r243520 + r243527;
double r243529 = r243519 ? r243524 : r243528;
return r243529;
}




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)))