\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 -3.035091110489776 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\sqrt{\left(g + h\right) \cdot \left(g - h\right)} - g} \cdot \sqrt[3]{\frac{\frac{1}{2}}{a}} + \sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(g + \sqrt{\left(g + h\right) \cdot \left(g - h\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(g + g\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}} + \sqrt[3]{\left(\sqrt{\left(g + h\right) \cdot \left(g - h\right)} - g\right) \cdot \frac{\frac{1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r8245868 = 1.0;
double r8245869 = 2.0;
double r8245870 = a;
double r8245871 = r8245869 * r8245870;
double r8245872 = r8245868 / r8245871;
double r8245873 = g;
double r8245874 = -r8245873;
double r8245875 = r8245873 * r8245873;
double r8245876 = h;
double r8245877 = r8245876 * r8245876;
double r8245878 = r8245875 - r8245877;
double r8245879 = sqrt(r8245878);
double r8245880 = r8245874 + r8245879;
double r8245881 = r8245872 * r8245880;
double r8245882 = cbrt(r8245881);
double r8245883 = r8245874 - r8245879;
double r8245884 = r8245872 * r8245883;
double r8245885 = cbrt(r8245884);
double r8245886 = r8245882 + r8245885;
return r8245886;
}
double f(double g, double h, double a) {
double r8245887 = g;
double r8245888 = -3.035091110489776e-158;
bool r8245889 = r8245887 <= r8245888;
double r8245890 = h;
double r8245891 = r8245887 + r8245890;
double r8245892 = r8245887 - r8245890;
double r8245893 = r8245891 * r8245892;
double r8245894 = sqrt(r8245893);
double r8245895 = r8245894 - r8245887;
double r8245896 = cbrt(r8245895);
double r8245897 = 0.5;
double r8245898 = a;
double r8245899 = r8245897 / r8245898;
double r8245900 = cbrt(r8245899);
double r8245901 = r8245896 * r8245900;
double r8245902 = -0.5;
double r8245903 = r8245902 / r8245898;
double r8245904 = r8245887 + r8245894;
double r8245905 = r8245903 * r8245904;
double r8245906 = cbrt(r8245905);
double r8245907 = r8245901 + r8245906;
double r8245908 = r8245887 + r8245887;
double r8245909 = r8245908 * r8245902;
double r8245910 = cbrt(r8245909);
double r8245911 = cbrt(r8245898);
double r8245912 = r8245910 / r8245911;
double r8245913 = r8245895 * r8245899;
double r8245914 = cbrt(r8245913);
double r8245915 = r8245912 + r8245914;
double r8245916 = r8245889 ? r8245907 : r8245915;
return r8245916;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.035091110489776e-158Initial program 33.7
Simplified33.7
rmApplied cbrt-prod29.8
if -3.035091110489776e-158 < g Initial program 36.8
Simplified36.8
rmApplied associate-*l/36.8
Applied cbrt-div33.2
Taylor expanded around inf 32.4
Final simplification31.2
herbie shell --seed 2019163 +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))))))))