\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 1.5535024974663892 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{2 \cdot a}} + \sqrt[3]{-\left(g + g\right)} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{g + \left(-g\right)} + \frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r2639975 = 1.0;
double r2639976 = 2.0;
double r2639977 = a;
double r2639978 = r2639976 * r2639977;
double r2639979 = r2639975 / r2639978;
double r2639980 = g;
double r2639981 = -r2639980;
double r2639982 = r2639980 * r2639980;
double r2639983 = h;
double r2639984 = r2639983 * r2639983;
double r2639985 = r2639982 - r2639984;
double r2639986 = sqrt(r2639985);
double r2639987 = r2639981 + r2639986;
double r2639988 = r2639979 * r2639987;
double r2639989 = cbrt(r2639988);
double r2639990 = r2639981 - r2639986;
double r2639991 = r2639979 * r2639990;
double r2639992 = cbrt(r2639991);
double r2639993 = r2639989 + r2639992;
return r2639993;
}
double f(double g, double h, double a) {
double r2639994 = g;
double r2639995 = 1.5535024974663892e-158;
bool r2639996 = r2639994 <= r2639995;
double r2639997 = -r2639994;
double r2639998 = r2639994 * r2639994;
double r2639999 = h;
double r2640000 = r2639999 * r2639999;
double r2640001 = r2639998 - r2640000;
double r2640002 = sqrt(r2640001);
double r2640003 = r2639997 - r2640002;
double r2640004 = 1.0;
double r2640005 = 2.0;
double r2640006 = a;
double r2640007 = r2640005 * r2640006;
double r2640008 = r2640004 / r2640007;
double r2640009 = r2640003 * r2640008;
double r2640010 = cbrt(r2640009);
double r2640011 = r2639994 + r2639994;
double r2640012 = -r2640011;
double r2640013 = cbrt(r2640012);
double r2640014 = cbrt(r2640008);
double r2640015 = r2640013 * r2640014;
double r2640016 = r2640010 + r2640015;
double r2640017 = r2639994 + r2639997;
double r2640018 = cbrt(r2640017);
double r2640019 = r2640014 * r2640018;
double r2640020 = cbrt(r2640003);
double r2640021 = cbrt(r2640007);
double r2640022 = r2640020 / r2640021;
double r2640023 = r2640019 + r2640022;
double r2640024 = r2639996 ? r2640016 : r2640023;
return r2640024;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.5535024974663892e-158Initial program 36.3
rmApplied cbrt-prod32.6
Taylor expanded around -inf 31.6
Simplified31.6
if 1.5535024974663892e-158 < g Initial program 33.1
rmApplied cbrt-prod33.1
rmApplied associate-*l/33.1
Applied cbrt-div29.2
Taylor expanded around inf 29.2
Final simplification30.5
herbie shell --seed 2019156
(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))))))))