\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\begin{array}{l}
\mathbf{if}\;g \le -2.10518339907436567 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r144969 = 1.0;
double r144970 = 2.0;
double r144971 = a;
double r144972 = r144970 * r144971;
double r144973 = r144969 / r144972;
double r144974 = g;
double r144975 = -r144974;
double r144976 = r144974 * r144974;
double r144977 = h;
double r144978 = r144977 * r144977;
double r144979 = r144976 - r144978;
double r144980 = sqrt(r144979);
double r144981 = r144975 + r144980;
double r144982 = r144973 * r144981;
double r144983 = cbrt(r144982);
double r144984 = r144975 - r144980;
double r144985 = r144973 * r144984;
double r144986 = cbrt(r144985);
double r144987 = r144983 + r144986;
return r144987;
}
double f(double g, double h, double a) {
double r144988 = g;
double r144989 = -2.1051833990743657e-158;
bool r144990 = r144988 <= r144989;
double r144991 = 1.0;
double r144992 = 2.0;
double r144993 = a;
double r144994 = r144992 * r144993;
double r144995 = r144991 / r144994;
double r144996 = cbrt(r144995);
double r144997 = -r144988;
double r144998 = r144988 * r144988;
double r144999 = h;
double r145000 = r144999 * r144999;
double r145001 = r144998 - r145000;
double r145002 = cbrt(r145001);
double r145003 = fabs(r145002);
double r145004 = sqrt(r145002);
double r145005 = r145003 * r145004;
double r145006 = r144997 + r145005;
double r145007 = cbrt(r145006);
double r145008 = r144996 * r145007;
double r145009 = sqrt(r145001);
double r145010 = r144997 - r145009;
double r145011 = cbrt(r145010);
double r145012 = r144996 * r145011;
double r145013 = r145008 + r145012;
double r145014 = r144997 + r145009;
double r145015 = r144995 * r145014;
double r145016 = cbrt(r145015);
double r145017 = r144997 - r144988;
double r145018 = cbrt(r145017);
double r145019 = r144996 * r145018;
double r145020 = r145016 + r145019;
double r145021 = r144990 ? r145013 : r145020;
return r145021;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.1051833990743657e-158Initial program 33.7
rmApplied cbrt-prod33.7
rmApplied cbrt-prod30.1
rmApplied add-cube-cbrt30.1
Applied sqrt-prod30.1
Simplified30.1
if -2.1051833990743657e-158 < g Initial program 37.1
rmApplied cbrt-prod33.6
Taylor expanded around inf 32.2
Final simplification31.2
herbie shell --seed 2020060 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
:precision binary64
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))