x + \frac{y \cdot \left(z - t\right)}{a}\begin{array}{l}
\mathbf{if}\;z - t \le -8.381032267864286848111598473235001808927 \cdot 10^{-13}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{a}, z - t, x\right)\\
\mathbf{elif}\;z - t \le 2.979324857395300632013474840610844551682 \cdot 10^{-117}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{\frac{1}{\sqrt[3]{y} \cdot \sqrt[3]{y}}}, \frac{z - t}{\frac{a}{\sqrt[3]{y}}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{z - t}{\frac{a}{y}} + x\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r232855 = x;
double r232856 = y;
double r232857 = z;
double r232858 = t;
double r232859 = r232857 - r232858;
double r232860 = r232856 * r232859;
double r232861 = a;
double r232862 = r232860 / r232861;
double r232863 = r232855 + r232862;
return r232863;
}
double f(double x, double y, double z, double t, double a) {
double r232864 = z;
double r232865 = t;
double r232866 = r232864 - r232865;
double r232867 = -8.381032267864287e-13;
bool r232868 = r232866 <= r232867;
double r232869 = y;
double r232870 = a;
double r232871 = r232869 / r232870;
double r232872 = x;
double r232873 = fma(r232871, r232866, r232872);
double r232874 = 2.9793248573953006e-117;
bool r232875 = r232866 <= r232874;
double r232876 = 1.0;
double r232877 = cbrt(r232869);
double r232878 = r232877 * r232877;
double r232879 = r232876 / r232878;
double r232880 = r232876 / r232879;
double r232881 = r232870 / r232877;
double r232882 = r232866 / r232881;
double r232883 = fma(r232880, r232882, r232872);
double r232884 = r232870 / r232869;
double r232885 = r232866 / r232884;
double r232886 = r232885 + r232872;
double r232887 = r232875 ? r232883 : r232886;
double r232888 = r232868 ? r232873 : r232887;
return r232888;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 6.1 |
|---|---|
| Target | 0.7 |
| Herbie | 1.6 |
if (- z t) < -8.381032267864287e-13Initial program 8.2
Simplified1.6
if -8.381032267864287e-13 < (- z t) < 2.9793248573953006e-117Initial program 1.2
Simplified5.6
rmApplied fma-udef5.6
Simplified5.2
rmApplied add-cube-cbrt5.5
Applied *-un-lft-identity5.5
Applied times-frac5.5
Applied *-un-lft-identity5.5
Applied times-frac1.3
Applied fma-def1.3
if 2.9793248573953006e-117 < (- z t) Initial program 6.8
Simplified1.5
rmApplied fma-udef1.5
Simplified1.6
Final simplification1.6
herbie shell --seed 2019235 +o rules:numerics
(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)))