\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 -8.241867523918404 \cdot 10^{-156}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right) + \left(-g\right)} + \sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}} + \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 r4515955 = 1.0;
double r4515956 = 2.0;
double r4515957 = a;
double r4515958 = r4515956 * r4515957;
double r4515959 = r4515955 / r4515958;
double r4515960 = g;
double r4515961 = -r4515960;
double r4515962 = r4515960 * r4515960;
double r4515963 = h;
double r4515964 = r4515963 * r4515963;
double r4515965 = r4515962 - r4515964;
double r4515966 = sqrt(r4515965);
double r4515967 = r4515961 + r4515966;
double r4515968 = r4515959 * r4515967;
double r4515969 = cbrt(r4515968);
double r4515970 = r4515961 - r4515966;
double r4515971 = r4515959 * r4515970;
double r4515972 = cbrt(r4515971);
double r4515973 = r4515969 + r4515972;
return r4515973;
}
double f(double g, double h, double a) {
double r4515974 = g;
double r4515975 = -8.241867523918404e-156;
bool r4515976 = r4515974 <= r4515975;
double r4515977 = 1.0;
double r4515978 = 2.0;
double r4515979 = a;
double r4515980 = r4515978 * r4515979;
double r4515981 = r4515977 / r4515980;
double r4515982 = cbrt(r4515981);
double r4515983 = r4515974 * r4515974;
double r4515984 = h;
double r4515985 = r4515984 * r4515984;
double r4515986 = r4515983 - r4515985;
double r4515987 = sqrt(r4515986);
double r4515988 = cbrt(r4515987);
double r4515989 = r4515988 * r4515988;
double r4515990 = r4515988 * r4515989;
double r4515991 = -r4515974;
double r4515992 = r4515990 + r4515991;
double r4515993 = cbrt(r4515992);
double r4515994 = r4515982 * r4515993;
double r4515995 = r4515991 - r4515987;
double r4515996 = r4515995 * r4515981;
double r4515997 = cbrt(r4515996);
double r4515998 = r4515994 + r4515997;
double r4515999 = r4515987 + r4515991;
double r4516000 = r4515999 * r4515981;
double r4516001 = cbrt(r4516000);
double r4516002 = r4515991 - r4515974;
double r4516003 = cbrt(r4516002);
double r4516004 = r4515982 * r4516003;
double r4516005 = r4516001 + r4516004;
double r4516006 = r4515976 ? r4515998 : r4516005;
return r4516006;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.241867523918404e-156Initial program 34.4
rmApplied cbrt-prod31.0
rmApplied add-cube-cbrt31.0
if -8.241867523918404e-156 < g Initial program 35.8
rmApplied cbrt-prod32.3
Taylor expanded around inf 31.5
Final simplification31.3
herbie shell --seed 2019132 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))