\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.1782238543655228 \cdot 10^{-238}:\\
\;\;\;\;\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}:\\
\;\;\;\;\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) - \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right) \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r149644 = 1.0;
double r149645 = 2.0;
double r149646 = a;
double r149647 = r149645 * r149646;
double r149648 = r149644 / r149647;
double r149649 = g;
double r149650 = -r149649;
double r149651 = r149649 * r149649;
double r149652 = h;
double r149653 = r149652 * r149652;
double r149654 = r149651 - r149653;
double r149655 = sqrt(r149654);
double r149656 = r149650 + r149655;
double r149657 = r149648 * r149656;
double r149658 = cbrt(r149657);
double r149659 = r149650 - r149655;
double r149660 = r149648 * r149659;
double r149661 = cbrt(r149660);
double r149662 = r149658 + r149661;
return r149662;
}
double f(double g, double h, double a) {
double r149663 = g;
double r149664 = -1.1782238543655228e-238;
bool r149665 = r149663 <= r149664;
double r149666 = 1.0;
double r149667 = -r149663;
double r149668 = -1.0;
double r149669 = r149668 * r149663;
double r149670 = r149667 + r149669;
double r149671 = r149666 * r149670;
double r149672 = cbrt(r149671);
double r149673 = 2.0;
double r149674 = a;
double r149675 = r149673 * r149674;
double r149676 = cbrt(r149675);
double r149677 = r149672 / r149676;
double r149678 = r149666 / r149675;
double r149679 = r149663 * r149663;
double r149680 = h;
double r149681 = r149680 * r149680;
double r149682 = r149679 - r149681;
double r149683 = sqrt(r149682);
double r149684 = r149667 - r149683;
double r149685 = r149678 * r149684;
double r149686 = cbrt(r149685);
double r149687 = r149677 + r149686;
double r149688 = r149667 + r149683;
double r149689 = r149678 * r149688;
double r149690 = cbrt(r149689);
double r149691 = cbrt(r149683);
double r149692 = r149691 * r149691;
double r149693 = r149692 * r149691;
double r149694 = r149667 - r149693;
double r149695 = r149666 * r149694;
double r149696 = cbrt(r149695);
double r149697 = r149696 / r149676;
double r149698 = r149690 + r149697;
double r149699 = r149665 ? r149687 : r149698;
return r149699;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.1782238543655228e-238Initial program 35.0
rmApplied associate-*l/35.0
Applied cbrt-div31.1
Taylor expanded around -inf 30.8
if -1.1782238543655228e-238 < g Initial program 35.9
rmApplied associate-*l/35.9
Applied cbrt-div32.4
rmApplied add-cube-cbrt32.4
Final simplification31.6
herbie shell --seed 2020035 +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))))))))