x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;y \le -3.506169073250434556576682563271829432785 \cdot 10^{60} \lor \neg \left(y \le 5122316469.390033721923828125\right):\\
\;\;\;\;x + y \cdot \frac{t - z}{a}\\
\mathbf{else}:\\
\;\;\;\;x + \left(\frac{t \cdot y}{a} - \frac{z \cdot y}{a}\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r319579 = x;
double r319580 = y;
double r319581 = z;
double r319582 = t;
double r319583 = r319581 - r319582;
double r319584 = r319580 * r319583;
double r319585 = a;
double r319586 = r319584 / r319585;
double r319587 = r319579 - r319586;
return r319587;
}
double f(double x, double y, double z, double t, double a) {
double r319588 = y;
double r319589 = -3.5061690732504346e+60;
bool r319590 = r319588 <= r319589;
double r319591 = 5122316469.390034;
bool r319592 = r319588 <= r319591;
double r319593 = !r319592;
bool r319594 = r319590 || r319593;
double r319595 = x;
double r319596 = t;
double r319597 = z;
double r319598 = r319596 - r319597;
double r319599 = a;
double r319600 = r319598 / r319599;
double r319601 = r319588 * r319600;
double r319602 = r319595 + r319601;
double r319603 = r319596 * r319588;
double r319604 = r319603 / r319599;
double r319605 = r319597 * r319588;
double r319606 = r319605 / r319599;
double r319607 = r319604 - r319606;
double r319608 = r319595 + r319607;
double r319609 = r319594 ? r319602 : r319608;
return r319609;
}




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.8 |
if y < -3.5061690732504346e+60 or 5122316469.390034 < y Initial program 18.0
Simplified4.5
rmApplied div-inv4.6
Applied associate-*l*1.0
Simplified0.9
if -3.5061690732504346e+60 < y < 5122316469.390034Initial program 0.8
Simplified1.7
rmApplied add-cube-cbrt2.2
Applied add-cube-cbrt2.3
Applied times-frac2.3
Applied associate-*l*0.8
Taylor expanded around 0 0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2019174
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
: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)))