\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 -6.3921017940024375 \cdot 10^{-161}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{-1}{2}}{a}} \cdot \sqrt[3]{\frac{g \cdot g - \left(g - h\right) \cdot \left(h + g\right)}{g - \sqrt{\left(g - h\right) \cdot \left(h + g\right)}}} + \frac{\sqrt[3]{\frac{1}{2} \cdot \left(\sqrt{\left(g - h\right) \cdot \left(h + g\right)} - g\right)}}{\sqrt[3]{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{\left(g - h\right) \cdot \left(h + g\right)} - g}{a} \cdot \frac{1}{2}} + \sqrt[3]{g + g} \cdot \sqrt[3]{\frac{\frac{-1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r5443891 = 1.0;
double r5443892 = 2.0;
double r5443893 = a;
double r5443894 = r5443892 * r5443893;
double r5443895 = r5443891 / r5443894;
double r5443896 = g;
double r5443897 = -r5443896;
double r5443898 = r5443896 * r5443896;
double r5443899 = h;
double r5443900 = r5443899 * r5443899;
double r5443901 = r5443898 - r5443900;
double r5443902 = sqrt(r5443901);
double r5443903 = r5443897 + r5443902;
double r5443904 = r5443895 * r5443903;
double r5443905 = cbrt(r5443904);
double r5443906 = r5443897 - r5443902;
double r5443907 = r5443895 * r5443906;
double r5443908 = cbrt(r5443907);
double r5443909 = r5443905 + r5443908;
return r5443909;
}
double f(double g, double h, double a) {
double r5443910 = g;
double r5443911 = -6.3921017940024375e-161;
bool r5443912 = r5443910 <= r5443911;
double r5443913 = -0.5;
double r5443914 = a;
double r5443915 = r5443913 / r5443914;
double r5443916 = cbrt(r5443915);
double r5443917 = r5443910 * r5443910;
double r5443918 = h;
double r5443919 = r5443910 - r5443918;
double r5443920 = r5443918 + r5443910;
double r5443921 = r5443919 * r5443920;
double r5443922 = r5443917 - r5443921;
double r5443923 = sqrt(r5443921);
double r5443924 = r5443910 - r5443923;
double r5443925 = r5443922 / r5443924;
double r5443926 = cbrt(r5443925);
double r5443927 = r5443916 * r5443926;
double r5443928 = 0.5;
double r5443929 = r5443923 - r5443910;
double r5443930 = r5443928 * r5443929;
double r5443931 = cbrt(r5443930);
double r5443932 = cbrt(r5443914);
double r5443933 = r5443931 / r5443932;
double r5443934 = r5443927 + r5443933;
double r5443935 = r5443929 / r5443914;
double r5443936 = r5443935 * r5443928;
double r5443937 = cbrt(r5443936);
double r5443938 = r5443910 + r5443910;
double r5443939 = cbrt(r5443938);
double r5443940 = r5443939 * r5443916;
double r5443941 = r5443937 + r5443940;
double r5443942 = r5443912 ? r5443934 : r5443941;
return r5443942;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -6.3921017940024375e-161Initial program 34.4
Simplified34.4
rmApplied cbrt-prod34.3
rmApplied associate-*l/34.3
Applied cbrt-div30.4
rmApplied flip-+30.2
Simplified30.2
if -6.3921017940024375e-161 < g Initial program 36.2
Simplified36.2
rmApplied cbrt-prod32.5
Taylor expanded around inf 31.3
Final simplification30.8
herbie shell --seed 2019162 +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))))))))