\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.578964718673522815690060657216820823207 \cdot 10^{-162}:\\
\;\;\;\;\frac{\sqrt[3]{\sqrt{\left(h + g\right) \cdot \left(g - h\right)} - g}}{\sqrt[3]{\frac{2}{\frac{1}{a}}}} + \sqrt[3]{\frac{1}{2}} \cdot \sqrt[3]{\frac{-\left(g + \sqrt{\left(h + g\right) \cdot \left(g - h\right)}\right)}{a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{\left(h + g\right) \cdot \left(g - h\right) - g \cdot g}{g + \sqrt{\left(h + g\right) \cdot \left(g - h\right)}}}}{\sqrt[3]{\frac{2}{\frac{1}{a}}}} + \sqrt[3]{\left(-g\right) - \sqrt{\left(h + g\right) \cdot \left(g - h\right)}} \cdot \sqrt[3]{\frac{\frac{1}{a}}{2}}\\
\end{array}double f(double g, double h, double a) {
double r132863 = 1.0;
double r132864 = 2.0;
double r132865 = a;
double r132866 = r132864 * r132865;
double r132867 = r132863 / r132866;
double r132868 = g;
double r132869 = -r132868;
double r132870 = r132868 * r132868;
double r132871 = h;
double r132872 = r132871 * r132871;
double r132873 = r132870 - r132872;
double r132874 = sqrt(r132873);
double r132875 = r132869 + r132874;
double r132876 = r132867 * r132875;
double r132877 = cbrt(r132876);
double r132878 = r132869 - r132874;
double r132879 = r132867 * r132878;
double r132880 = cbrt(r132879);
double r132881 = r132877 + r132880;
return r132881;
}
double f(double g, double h, double a) {
double r132882 = g;
double r132883 = -1.5789647186735228e-162;
bool r132884 = r132882 <= r132883;
double r132885 = h;
double r132886 = r132885 + r132882;
double r132887 = r132882 - r132885;
double r132888 = r132886 * r132887;
double r132889 = sqrt(r132888);
double r132890 = r132889 - r132882;
double r132891 = cbrt(r132890);
double r132892 = 2.0;
double r132893 = 1.0;
double r132894 = a;
double r132895 = r132893 / r132894;
double r132896 = r132892 / r132895;
double r132897 = cbrt(r132896);
double r132898 = r132891 / r132897;
double r132899 = r132893 / r132892;
double r132900 = cbrt(r132899);
double r132901 = r132882 + r132889;
double r132902 = -r132901;
double r132903 = r132902 / r132894;
double r132904 = cbrt(r132903);
double r132905 = r132900 * r132904;
double r132906 = r132898 + r132905;
double r132907 = r132882 * r132882;
double r132908 = r132888 - r132907;
double r132909 = r132908 / r132901;
double r132910 = cbrt(r132909);
double r132911 = r132910 / r132897;
double r132912 = -r132882;
double r132913 = r132912 - r132889;
double r132914 = cbrt(r132913);
double r132915 = r132895 / r132892;
double r132916 = cbrt(r132915);
double r132917 = r132914 * r132916;
double r132918 = r132911 + r132917;
double r132919 = r132884 ? r132906 : r132918;
return r132919;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.5789647186735228e-162Initial program 34.8
Simplified34.8
rmApplied cbrt-div30.9
Simplified30.9
rmApplied add-cbrt-cube30.9
Simplified30.9
rmApplied cbrt-prod30.9
Simplified30.9
if -1.5789647186735228e-162 < g Initial program 36.9
Simplified36.9
rmApplied cbrt-div36.5
Simplified36.5
rmApplied cbrt-prod33.2
Simplified33.2
Simplified33.2
rmApplied flip--32.9
Simplified32.9
Simplified32.9
Final simplification32.0
herbie shell --seed 2019194
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))