x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -757188198512776.875:\\
\;\;\;\;y \cdot \frac{t - z}{a} + x\\
\mathbf{elif}\;a \le 32027701517384002043904:\\
\;\;\;\;\left(\frac{t \cdot y}{a} - \frac{z \cdot y}{a}\right) + x\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{a} \cdot \left(t - z\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r367579 = x;
double r367580 = y;
double r367581 = z;
double r367582 = t;
double r367583 = r367581 - r367582;
double r367584 = r367580 * r367583;
double r367585 = a;
double r367586 = r367584 / r367585;
double r367587 = r367579 - r367586;
return r367587;
}
double f(double x, double y, double z, double t, double a) {
double r367588 = a;
double r367589 = -757188198512776.9;
bool r367590 = r367588 <= r367589;
double r367591 = y;
double r367592 = t;
double r367593 = z;
double r367594 = r367592 - r367593;
double r367595 = r367594 / r367588;
double r367596 = r367591 * r367595;
double r367597 = x;
double r367598 = r367596 + r367597;
double r367599 = 3.2027701517384e+22;
bool r367600 = r367588 <= r367599;
double r367601 = r367592 * r367591;
double r367602 = r367601 / r367588;
double r367603 = r367593 * r367591;
double r367604 = r367603 / r367588;
double r367605 = r367602 - r367604;
double r367606 = r367605 + r367597;
double r367607 = r367591 / r367588;
double r367608 = r367607 * r367594;
double r367609 = r367608 + r367597;
double r367610 = r367600 ? r367606 : r367609;
double r367611 = r367590 ? r367598 : r367610;
return r367611;
}




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.8 |
| Herbie | 1.1 |
if a < -757188198512776.9Initial program 9.5
Simplified1.6
rmApplied fma-udef1.6
rmApplied div-inv1.7
Applied associate-*l*0.7
Simplified0.6
if -757188198512776.9 < a < 3.2027701517384e+22Initial program 0.9
Simplified3.2
rmApplied fma-udef3.2
rmApplied add-cube-cbrt3.9
Applied associate-*l*3.9
Taylor expanded around 0 0.9
if 3.2027701517384e+22 < a Initial program 10.1
Simplified1.8
rmApplied fma-udef1.8
Final simplification1.1
herbie shell --seed 2019354 +o rules:numerics
(FPCore (x y z t a)
:name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, F"
:precision binary64
:herbie-target
(if (< y -1.0761266216389975e-10) (- x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (- x (/ (* y (- z t)) a)) (- x (/ y (/ a (- z t))))))
(- x (/ (* y (- z t)) a)))