\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 -8.359356862874829159472492534077743049279 \cdot 10^{-185}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\sqrt{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt{\sqrt{g \cdot g - h \cdot h}} - g\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r84840 = 1.0;
double r84841 = 2.0;
double r84842 = a;
double r84843 = r84841 * r84842;
double r84844 = r84840 / r84843;
double r84845 = g;
double r84846 = -r84845;
double r84847 = r84845 * r84845;
double r84848 = h;
double r84849 = r84848 * r84848;
double r84850 = r84847 - r84849;
double r84851 = sqrt(r84850);
double r84852 = r84846 + r84851;
double r84853 = r84844 * r84852;
double r84854 = cbrt(r84853);
double r84855 = r84846 - r84851;
double r84856 = r84844 * r84855;
double r84857 = cbrt(r84856);
double r84858 = r84854 + r84857;
return r84858;
}
double f(double g, double h, double a) {
double r84859 = g;
double r84860 = -8.359356862874829e-185;
bool r84861 = r84859 <= r84860;
double r84862 = 1.0;
double r84863 = r84859 * r84859;
double r84864 = h;
double r84865 = r84864 * r84864;
double r84866 = r84863 - r84865;
double r84867 = sqrt(r84866);
double r84868 = sqrt(r84867);
double r84869 = r84868 * r84868;
double r84870 = r84869 - r84859;
double r84871 = r84862 * r84870;
double r84872 = cbrt(r84871);
double r84873 = 2.0;
double r84874 = a;
double r84875 = r84873 * r84874;
double r84876 = cbrt(r84875);
double r84877 = r84872 / r84876;
double r84878 = r84862 / r84875;
double r84879 = cbrt(r84878);
double r84880 = -r84859;
double r84881 = r84880 - r84867;
double r84882 = cbrt(r84881);
double r84883 = r84879 * r84882;
double r84884 = r84877 + r84883;
double r84885 = r84867 - r84859;
double r84886 = r84878 * r84885;
double r84887 = cbrt(r84886);
double r84888 = r84880 - r84859;
double r84889 = cbrt(r84888);
double r84890 = r84879 * r84889;
double r84891 = r84887 + r84890;
double r84892 = r84861 ? r84884 : r84891;
return r84892;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.359356862874829e-185Initial program 35.3
Simplified35.3
rmApplied cbrt-prod35.2
rmApplied associate-*l/35.2
Applied cbrt-div31.3
rmApplied add-sqr-sqrt31.3
Applied sqrt-prod31.3
if -8.359356862874829e-185 < g Initial program 36.8
Simplified36.8
rmApplied cbrt-prod33.4
Taylor expanded around inf 32.5
Final simplification31.9
herbie shell --seed 2019326
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
:precision binary64
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))