\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.436549254635570642232365575110592726102 \cdot 10^{-159}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right) \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}}\\
\end{array}double f(double g, double h, double a) {
double r91847 = 1.0;
double r91848 = 2.0;
double r91849 = a;
double r91850 = r91848 * r91849;
double r91851 = r91847 / r91850;
double r91852 = g;
double r91853 = -r91852;
double r91854 = r91852 * r91852;
double r91855 = h;
double r91856 = r91855 * r91855;
double r91857 = r91854 - r91856;
double r91858 = sqrt(r91857);
double r91859 = r91853 + r91858;
double r91860 = r91851 * r91859;
double r91861 = cbrt(r91860);
double r91862 = r91853 - r91858;
double r91863 = r91851 * r91862;
double r91864 = cbrt(r91863);
double r91865 = r91861 + r91864;
return r91865;
}
double f(double g, double h, double a) {
double r91866 = g;
double r91867 = 8.436549254635571e-159;
bool r91868 = r91866 <= r91867;
double r91869 = 1.0;
double r91870 = 2.0;
double r91871 = a;
double r91872 = r91870 * r91871;
double r91873 = r91869 / r91872;
double r91874 = cbrt(r91873);
double r91875 = -r91866;
double r91876 = r91875 - r91866;
double r91877 = cbrt(r91876);
double r91878 = r91874 * r91877;
double r91879 = r91866 * r91866;
double r91880 = h;
double r91881 = r91880 * r91880;
double r91882 = r91879 - r91881;
double r91883 = sqrt(r91882);
double r91884 = r91875 - r91883;
double r91885 = r91873 * r91884;
double r91886 = cbrt(r91885);
double r91887 = r91878 + r91886;
double r91888 = r91883 - r91866;
double r91889 = r91869 * r91888;
double r91890 = cbrt(r91889);
double r91891 = cbrt(r91872);
double r91892 = r91890 / r91891;
double r91893 = cbrt(r91883);
double r91894 = r91893 * r91893;
double r91895 = r91894 * r91893;
double r91896 = r91875 - r91895;
double r91897 = cbrt(r91896);
double r91898 = r91874 * r91897;
double r91899 = r91892 + r91898;
double r91900 = r91868 ? r91887 : r91899;
return r91900;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 8.436549254635571e-159Initial program 37.5
Simplified37.5
rmApplied cbrt-prod33.4
Taylor expanded around -inf 31.9
Simplified31.9
if 8.436549254635571e-159 < g Initial program 35.2
Simplified35.2
rmApplied associate-*l/35.2
Applied cbrt-div35.2
rmApplied cbrt-prod31.2
rmApplied add-cube-cbrt31.2
Final simplification31.6
herbie shell --seed 2019323 +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))))))))