\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.5974918824598454 \cdot 10^{-162}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{2}} \cdot \sqrt[3]{\frac{1}{a}} + \frac{\sqrt[3]{\left(\left(-g\right) + g\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(g + \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}} + \sqrt[3]{\frac{g - g}{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r3841959 = 1.0;
double r3841960 = 2.0;
double r3841961 = a;
double r3841962 = r3841960 * r3841961;
double r3841963 = r3841959 / r3841962;
double r3841964 = g;
double r3841965 = -r3841964;
double r3841966 = r3841964 * r3841964;
double r3841967 = h;
double r3841968 = r3841967 * r3841967;
double r3841969 = r3841966 - r3841968;
double r3841970 = sqrt(r3841969);
double r3841971 = r3841965 + r3841970;
double r3841972 = r3841963 * r3841971;
double r3841973 = cbrt(r3841972);
double r3841974 = r3841965 - r3841970;
double r3841975 = r3841963 * r3841974;
double r3841976 = cbrt(r3841975);
double r3841977 = r3841973 + r3841976;
return r3841977;
}
double f(double g, double h, double a) {
double r3841978 = g;
double r3841979 = -1.5974918824598454e-162;
bool r3841980 = r3841978 <= r3841979;
double r3841981 = r3841978 * r3841978;
double r3841982 = h;
double r3841983 = r3841982 * r3841982;
double r3841984 = r3841981 - r3841983;
double r3841985 = sqrt(r3841984);
double r3841986 = r3841985 - r3841978;
double r3841987 = 2.0;
double r3841988 = r3841986 / r3841987;
double r3841989 = cbrt(r3841988);
double r3841990 = 1.0;
double r3841991 = a;
double r3841992 = r3841990 / r3841991;
double r3841993 = cbrt(r3841992);
double r3841994 = r3841989 * r3841993;
double r3841995 = -r3841978;
double r3841996 = r3841995 + r3841978;
double r3841997 = -0.5;
double r3841998 = r3841996 * r3841997;
double r3841999 = cbrt(r3841998);
double r3842000 = cbrt(r3841991);
double r3842001 = r3841999 / r3842000;
double r3842002 = r3841994 + r3842001;
double r3842003 = r3841978 + r3841985;
double r3842004 = r3842003 * r3841997;
double r3842005 = cbrt(r3842004);
double r3842006 = r3842005 / r3842000;
double r3842007 = r3841978 - r3841978;
double r3842008 = r3841991 * r3841987;
double r3842009 = r3842007 / r3842008;
double r3842010 = cbrt(r3842009);
double r3842011 = r3842006 + r3842010;
double r3842012 = r3841980 ? r3842002 : r3842011;
return r3842012;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.5974918824598454e-162Initial program 33.8
Simplified33.8
rmApplied associate-*r/33.8
Applied cbrt-div33.8
rmApplied *-un-lft-identity33.8
Applied times-frac33.8
Applied cbrt-prod30.3
Taylor expanded around -inf 30.1
Simplified30.1
if -1.5974918824598454e-162 < g Initial program 36.5
Simplified36.5
rmApplied associate-*r/36.5
Applied cbrt-div32.9
Taylor expanded around inf 32.7
Final simplification31.4
herbie shell --seed 2019151
(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))))))))