\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.8946190630550178 \cdot 10^{-162}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + -1 \cdot g\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) \cdot \left(-g\right) - \sqrt{g \cdot g - h \cdot h} \cdot \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r158708 = 1.0;
double r158709 = 2.0;
double r158710 = a;
double r158711 = r158709 * r158710;
double r158712 = r158708 / r158711;
double r158713 = g;
double r158714 = -r158713;
double r158715 = r158713 * r158713;
double r158716 = h;
double r158717 = r158716 * r158716;
double r158718 = r158715 - r158717;
double r158719 = sqrt(r158718);
double r158720 = r158714 + r158719;
double r158721 = r158712 * r158720;
double r158722 = cbrt(r158721);
double r158723 = r158714 - r158719;
double r158724 = r158712 * r158723;
double r158725 = cbrt(r158724);
double r158726 = r158722 + r158725;
return r158726;
}
double f(double g, double h, double a) {
double r158727 = g;
double r158728 = 5.894619063055018e-162;
bool r158729 = r158727 <= r158728;
double r158730 = 1.0;
double r158731 = -r158727;
double r158732 = -1.0;
double r158733 = r158732 * r158727;
double r158734 = r158731 + r158733;
double r158735 = r158730 * r158734;
double r158736 = cbrt(r158735);
double r158737 = 2.0;
double r158738 = a;
double r158739 = r158737 * r158738;
double r158740 = cbrt(r158739);
double r158741 = r158736 / r158740;
double r158742 = r158730 / r158739;
double r158743 = r158727 * r158727;
double r158744 = h;
double r158745 = r158744 * r158744;
double r158746 = r158743 - r158745;
double r158747 = sqrt(r158746);
double r158748 = r158731 - r158747;
double r158749 = r158742 * r158748;
double r158750 = cbrt(r158749);
double r158751 = r158741 + r158750;
double r158752 = r158731 * r158731;
double r158753 = r158747 * r158747;
double r158754 = r158752 - r158753;
double r158755 = r158742 * r158754;
double r158756 = cbrt(r158755);
double r158757 = cbrt(r158748);
double r158758 = r158756 / r158757;
double r158759 = r158730 * r158748;
double r158760 = cbrt(r158759);
double r158761 = r158760 / r158740;
double r158762 = r158758 + r158761;
double r158763 = r158729 ? r158751 : r158762;
return r158763;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 5.894619063055018e-162Initial program 37.4
rmApplied associate-*l/37.4
Applied cbrt-div33.1
Taylor expanded around -inf 31.8
if 5.894619063055018e-162 < g Initial program 34.3
rmApplied associate-*l/34.3
Applied cbrt-div30.7
rmApplied flip-+30.6
Applied associate-*r/30.7
Applied cbrt-div30.7
Final simplification31.3
herbie shell --seed 2020018 +o rules:numerics
(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))))))))