\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{\sqrt{g \cdot g - h \cdot h} - g}}{\sqrt[3]{\frac{a}{\frac{1}{2}}} \cdot \sqrt[3]{\frac{a}{\frac{1}{2}}}}} \cdot \sqrt[3]{\frac{\sqrt{\sqrt{g \cdot g - h \cdot h} - g}}{\sqrt[3]{\frac{a}{\frac{1}{2}}}}} + \sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(g + \sqrt{g \cdot g - h \cdot h}\right)}\\
\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}{\frac{a}{\frac{1}{2}}}}\\
\end{array}double f(double g, double h, double a) {
double r2182810 = 1.0;
double r2182811 = 2.0;
double r2182812 = a;
double r2182813 = r2182811 * r2182812;
double r2182814 = r2182810 / r2182813;
double r2182815 = g;
double r2182816 = -r2182815;
double r2182817 = r2182815 * r2182815;
double r2182818 = h;
double r2182819 = r2182818 * r2182818;
double r2182820 = r2182817 - r2182819;
double r2182821 = sqrt(r2182820);
double r2182822 = r2182816 + r2182821;
double r2182823 = r2182814 * r2182822;
double r2182824 = cbrt(r2182823);
double r2182825 = r2182816 - r2182821;
double r2182826 = r2182814 * r2182825;
double r2182827 = cbrt(r2182826);
double r2182828 = r2182824 + r2182827;
return r2182828;
}
double f(double g, double h, double a) {
double r2182829 = g;
double r2182830 = -1.5974918824598454e-162;
bool r2182831 = r2182829 <= r2182830;
double r2182832 = r2182829 * r2182829;
double r2182833 = h;
double r2182834 = r2182833 * r2182833;
double r2182835 = r2182832 - r2182834;
double r2182836 = sqrt(r2182835);
double r2182837 = r2182836 - r2182829;
double r2182838 = sqrt(r2182837);
double r2182839 = a;
double r2182840 = 0.5;
double r2182841 = r2182839 / r2182840;
double r2182842 = cbrt(r2182841);
double r2182843 = r2182842 * r2182842;
double r2182844 = r2182838 / r2182843;
double r2182845 = cbrt(r2182844);
double r2182846 = r2182838 / r2182842;
double r2182847 = cbrt(r2182846);
double r2182848 = r2182845 * r2182847;
double r2182849 = -0.5;
double r2182850 = r2182849 / r2182839;
double r2182851 = r2182829 + r2182836;
double r2182852 = r2182850 * r2182851;
double r2182853 = cbrt(r2182852);
double r2182854 = r2182848 + r2182853;
double r2182855 = r2182851 * r2182849;
double r2182856 = cbrt(r2182855);
double r2182857 = cbrt(r2182839);
double r2182858 = r2182856 / r2182857;
double r2182859 = r2182829 - r2182829;
double r2182860 = r2182859 / r2182841;
double r2182861 = cbrt(r2182860);
double r2182862 = r2182858 + r2182861;
double r2182863 = r2182831 ? r2182854 : r2182862;
return r2182863;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.5974918824598454e-162Initial program 33.8
Simplified33.8
rmApplied add-cube-cbrt34.0
Applied add-sqr-sqrt34.0
Applied times-frac34.0
Applied cbrt-prod30.5
if -1.5974918824598454e-162 < g Initial program 36.5
Simplified36.5
rmApplied associate-*l/36.5
Applied cbrt-div32.9
Taylor expanded around inf 32.7
Final simplification31.6
herbie shell --seed 2019151 +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))))))))