x - \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;a \le -1.131294303807309426502569446175008274808 \cdot 10^{-168}:\\
\;\;\;\;\left(y \cdot \frac{\sqrt[3]{t - z} \cdot \sqrt[3]{t - z}}{\sqrt[3]{a} \cdot \sqrt[3]{a}}\right) \cdot \frac{\sqrt[3]{t - z}}{\sqrt[3]{a}} + x\\
\mathbf{elif}\;a \le 8.709696976931573596806654735929958388855 \cdot 10^{77}:\\
\;\;\;\;\left(\frac{t \cdot y}{a} + \left(-\frac{z \cdot y}{a}\right)\right) + x\\
\mathbf{else}:\\
\;\;\;\;y \cdot \frac{t - z}{a} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r342573 = x;
double r342574 = y;
double r342575 = z;
double r342576 = t;
double r342577 = r342575 - r342576;
double r342578 = r342574 * r342577;
double r342579 = a;
double r342580 = r342578 / r342579;
double r342581 = r342573 - r342580;
return r342581;
}
double f(double x, double y, double z, double t, double a) {
double r342582 = a;
double r342583 = -1.1312943038073094e-168;
bool r342584 = r342582 <= r342583;
double r342585 = y;
double r342586 = t;
double r342587 = z;
double r342588 = r342586 - r342587;
double r342589 = cbrt(r342588);
double r342590 = r342589 * r342589;
double r342591 = cbrt(r342582);
double r342592 = r342591 * r342591;
double r342593 = r342590 / r342592;
double r342594 = r342585 * r342593;
double r342595 = r342589 / r342591;
double r342596 = r342594 * r342595;
double r342597 = x;
double r342598 = r342596 + r342597;
double r342599 = 8.709696976931574e+77;
bool r342600 = r342582 <= r342599;
double r342601 = r342586 * r342585;
double r342602 = r342601 / r342582;
double r342603 = r342587 * r342585;
double r342604 = r342603 / r342582;
double r342605 = -r342604;
double r342606 = r342602 + r342605;
double r342607 = r342606 + r342597;
double r342608 = r342588 / r342582;
double r342609 = r342585 * r342608;
double r342610 = r342609 + r342597;
double r342611 = r342600 ? r342607 : r342610;
double r342612 = r342584 ? r342598 : r342611;
return r342612;
}




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.7 |
| Herbie | 0.9 |
if a < -1.1312943038073094e-168Initial program 7.1
Simplified1.7
rmApplied fma-udef1.7
rmApplied div-inv1.7
Applied associate-*l*3.0
Simplified3.0
rmApplied add-cube-cbrt3.5
Applied add-cube-cbrt3.6
Applied times-frac3.6
Applied associate-*r*0.7
if -1.1312943038073094e-168 < a < 8.709696976931574e+77Initial program 1.3
Simplified3.4
rmApplied fma-udef3.4
rmApplied *-un-lft-identity3.4
Applied add-cube-cbrt4.1
Applied times-frac4.1
Applied associate-*l*9.6
rmApplied sub-neg9.6
Applied distribute-lft-in9.6
Applied distribute-lft-in9.6
Simplified6.4
Simplified1.3
if 8.709696976931574e+77 < a Initial program 12.0
Simplified2.2
rmApplied fma-udef2.2
rmApplied div-inv2.3
Applied associate-*l*0.6
Simplified0.6
Final simplification0.9
herbie shell --seed 2019350 +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)))