\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 -5.110014296461794 \cdot 10^{-199}:\\
\;\;\;\;\frac{\sqrt[3]{\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}} - g}}{\sqrt[3]{a \cdot 2}} + \frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{elif}\;g \le 6.420654691865451 \cdot 10^{-40}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right)} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{g \cdot g - \left(g \cdot g - h \cdot h\right)}}{\sqrt[3]{\left(a \cdot 2\right) \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}} + \frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r5478058 = 1.0;
double r5478059 = 2.0;
double r5478060 = a;
double r5478061 = r5478059 * r5478060;
double r5478062 = r5478058 / r5478061;
double r5478063 = g;
double r5478064 = -r5478063;
double r5478065 = r5478063 * r5478063;
double r5478066 = h;
double r5478067 = r5478066 * r5478066;
double r5478068 = r5478065 - r5478067;
double r5478069 = sqrt(r5478068);
double r5478070 = r5478064 + r5478069;
double r5478071 = r5478062 * r5478070;
double r5478072 = cbrt(r5478071);
double r5478073 = r5478064 - r5478069;
double r5478074 = r5478062 * r5478073;
double r5478075 = cbrt(r5478074);
double r5478076 = r5478072 + r5478075;
return r5478076;
}
double f(double g, double h, double a) {
double r5478077 = g;
double r5478078 = -5.110014296461794e-199;
bool r5478079 = r5478077 <= r5478078;
double r5478080 = r5478077 * r5478077;
double r5478081 = h;
double r5478082 = r5478081 * r5478081;
double r5478083 = r5478080 - r5478082;
double r5478084 = sqrt(r5478083);
double r5478085 = cbrt(r5478084);
double r5478086 = r5478085 * r5478085;
double r5478087 = r5478086 * r5478085;
double r5478088 = r5478087 - r5478077;
double r5478089 = cbrt(r5478088);
double r5478090 = a;
double r5478091 = 2.0;
double r5478092 = r5478090 * r5478091;
double r5478093 = cbrt(r5478092);
double r5478094 = r5478089 / r5478093;
double r5478095 = -r5478077;
double r5478096 = r5478095 - r5478084;
double r5478097 = cbrt(r5478096);
double r5478098 = r5478097 / r5478093;
double r5478099 = r5478094 + r5478098;
double r5478100 = 6.420654691865451e-40;
bool r5478101 = r5478077 <= r5478100;
double r5478102 = 1.0;
double r5478103 = r5478102 / r5478092;
double r5478104 = r5478084 + r5478095;
double r5478105 = r5478103 * r5478104;
double r5478106 = cbrt(r5478105);
double r5478107 = r5478095 - r5478077;
double r5478108 = cbrt(r5478107);
double r5478109 = r5478108 / r5478093;
double r5478110 = r5478106 + r5478109;
double r5478111 = r5478080 - r5478083;
double r5478112 = cbrt(r5478111);
double r5478113 = r5478092 * r5478096;
double r5478114 = cbrt(r5478113);
double r5478115 = r5478112 / r5478114;
double r5478116 = r5478115 + r5478098;
double r5478117 = r5478101 ? r5478110 : r5478116;
double r5478118 = r5478079 ? r5478099 : r5478117;
return r5478118;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -5.110014296461794e-199Initial program 33.9
rmApplied associate-*l/33.9
Applied cbrt-div33.8
rmApplied associate-*l/33.8
Applied cbrt-div30.6
Simplified30.6
rmApplied add-cube-cbrt30.6
if -5.110014296461794e-199 < g < 6.420654691865451e-40Initial program 28.8
rmApplied associate-*l/28.8
Applied cbrt-div23.1
Taylor expanded around inf 18.0
if 6.420654691865451e-40 < g Initial program 38.2
rmApplied associate-*l/38.2
Applied cbrt-div34.9
rmApplied flip-+34.9
Applied frac-times34.9
Applied cbrt-div34.8
Simplified34.8
Final simplification30.9
herbie shell --seed 2019138 +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))))))))