\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.074872537626072550641864022314071388626 \cdot 10^{-181}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}} + \frac{\sqrt[3]{1 \cdot \left(h \cdot h\right)}}{\sqrt[3]{\left(2 \cdot a\right) \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}\\
\end{array}double f(double g, double h, double a) {
double r191872 = 1.0;
double r191873 = 2.0;
double r191874 = a;
double r191875 = r191873 * r191874;
double r191876 = r191872 / r191875;
double r191877 = g;
double r191878 = -r191877;
double r191879 = r191877 * r191877;
double r191880 = h;
double r191881 = r191880 * r191880;
double r191882 = r191879 - r191881;
double r191883 = sqrt(r191882);
double r191884 = r191878 + r191883;
double r191885 = r191876 * r191884;
double r191886 = cbrt(r191885);
double r191887 = r191878 - r191883;
double r191888 = r191876 * r191887;
double r191889 = cbrt(r191888);
double r191890 = r191886 + r191889;
return r191890;
}
double f(double g, double h, double a) {
double r191891 = g;
double r191892 = 1.0748725376260726e-181;
bool r191893 = r191891 <= r191892;
double r191894 = 1.0;
double r191895 = 2.0;
double r191896 = a;
double r191897 = r191895 * r191896;
double r191898 = r191894 / r191897;
double r191899 = cbrt(r191898);
double r191900 = -r191891;
double r191901 = r191900 - r191891;
double r191902 = cbrt(r191901);
double r191903 = r191899 * r191902;
double r191904 = r191891 * r191891;
double r191905 = h;
double r191906 = r191905 * r191905;
double r191907 = r191904 - r191906;
double r191908 = sqrt(r191907);
double r191909 = r191900 - r191908;
double r191910 = r191898 * r191909;
double r191911 = cbrt(r191910);
double r191912 = r191903 + r191911;
double r191913 = cbrt(r191909);
double r191914 = r191899 * r191913;
double r191915 = r191894 * r191906;
double r191916 = cbrt(r191915);
double r191917 = r191897 * r191909;
double r191918 = cbrt(r191917);
double r191919 = r191916 / r191918;
double r191920 = r191914 + r191919;
double r191921 = r191893 ? r191912 : r191920;
return r191921;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.0748725376260726e-181Initial program 36.9
rmApplied cbrt-prod32.9
Simplified32.9
Taylor expanded around -inf 31.8
Simplified31.8
if 1.0748725376260726e-181 < g Initial program 35.5
rmApplied cbrt-prod31.7
rmApplied flip-+31.7
Applied frac-times32.8
Applied cbrt-div32.7
Simplified32.2
Final simplification32.0
herbie shell --seed 2019350
(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))))))))