\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.824957770492126269462751713124247080079 \cdot 10^{-179}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \sqrt{g \cdot g - h \cdot h}} + \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 \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - g\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r119688 = 1.0;
double r119689 = 2.0;
double r119690 = a;
double r119691 = r119689 * r119690;
double r119692 = r119688 / r119691;
double r119693 = g;
double r119694 = -r119693;
double r119695 = r119693 * r119693;
double r119696 = h;
double r119697 = r119696 * r119696;
double r119698 = r119695 - r119697;
double r119699 = sqrt(r119698);
double r119700 = r119694 + r119699;
double r119701 = r119692 * r119700;
double r119702 = cbrt(r119701);
double r119703 = r119694 - r119699;
double r119704 = r119692 * r119703;
double r119705 = cbrt(r119704);
double r119706 = r119702 + r119705;
return r119706;
}
double f(double g, double h, double a) {
double r119707 = g;
double r119708 = -8.824957770492126e-179;
bool r119709 = r119707 <= r119708;
double r119710 = 1.0;
double r119711 = 2.0;
double r119712 = a;
double r119713 = r119711 * r119712;
double r119714 = r119710 / r119713;
double r119715 = cbrt(r119714);
double r119716 = -r119707;
double r119717 = r119707 * r119707;
double r119718 = h;
double r119719 = r119718 * r119718;
double r119720 = r119717 - r119719;
double r119721 = sqrt(r119720);
double r119722 = r119716 + r119721;
double r119723 = cbrt(r119722);
double r119724 = r119715 * r119723;
double r119725 = r119716 - r119721;
double r119726 = r119714 * r119725;
double r119727 = cbrt(r119726);
double r119728 = r119724 + r119727;
double r119729 = r119714 * r119722;
double r119730 = cbrt(r119729);
double r119731 = r119716 - r119707;
double r119732 = r119710 * r119731;
double r119733 = cbrt(r119732);
double r119734 = cbrt(r119713);
double r119735 = r119733 / r119734;
double r119736 = r119730 + r119735;
double r119737 = r119709 ? r119728 : r119736;
return r119737;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.824957770492126e-179Initial program 35.5
rmApplied cbrt-prod31.7
if -8.824957770492126e-179 < g Initial program 37.3
rmApplied associate-*l/37.3
Applied cbrt-div33.8
Taylor expanded around inf 32.5
Final simplification32.1
herbie shell --seed 2019353 +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))))))))