\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.7601370127167322 \cdot 10^{-167}:\\
\;\;\;\;\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]{1 \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\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}}}\\
\end{array}double f(double g, double h, double a) {
double r176653 = 1.0;
double r176654 = 2.0;
double r176655 = a;
double r176656 = r176654 * r176655;
double r176657 = r176653 / r176656;
double r176658 = g;
double r176659 = -r176658;
double r176660 = r176658 * r176658;
double r176661 = h;
double r176662 = r176661 * r176661;
double r176663 = r176660 - r176662;
double r176664 = sqrt(r176663);
double r176665 = r176659 + r176664;
double r176666 = r176657 * r176665;
double r176667 = cbrt(r176666);
double r176668 = r176659 - r176664;
double r176669 = r176657 * r176668;
double r176670 = cbrt(r176669);
double r176671 = r176667 + r176670;
return r176671;
}
double f(double g, double h, double a) {
double r176672 = g;
double r176673 = 1.760137012716732e-167;
bool r176674 = r176672 <= r176673;
double r176675 = 1.0;
double r176676 = -r176672;
double r176677 = -1.0;
double r176678 = r176677 * r176672;
double r176679 = r176676 + r176678;
double r176680 = r176675 * r176679;
double r176681 = cbrt(r176680);
double r176682 = 2.0;
double r176683 = a;
double r176684 = r176682 * r176683;
double r176685 = cbrt(r176684);
double r176686 = r176681 / r176685;
double r176687 = r176675 / r176684;
double r176688 = r176672 * r176672;
double r176689 = h;
double r176690 = r176689 * r176689;
double r176691 = r176688 - r176690;
double r176692 = sqrt(r176691);
double r176693 = r176676 - r176692;
double r176694 = r176687 * r176693;
double r176695 = cbrt(r176694);
double r176696 = r176686 + r176695;
double r176697 = r176676 + r176692;
double r176698 = r176675 * r176697;
double r176699 = cbrt(r176698);
double r176700 = r176699 / r176685;
double r176701 = cbrt(r176687);
double r176702 = cbrt(r176692);
double r176703 = r176702 * r176702;
double r176704 = r176703 * r176702;
double r176705 = r176676 - r176704;
double r176706 = cbrt(r176705);
double r176707 = r176701 * r176706;
double r176708 = r176700 + r176707;
double r176709 = r176674 ? r176696 : r176708;
return r176709;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.760137012716732e-167Initial program 37.6
rmApplied associate-*l/37.6
Applied cbrt-div34.2
Taylor expanded around -inf 32.9
if 1.760137012716732e-167 < g Initial program 35.5
rmApplied associate-*l/35.5
Applied cbrt-div35.4
rmApplied cbrt-prod31.4
rmApplied add-cube-cbrt31.4
Final simplification32.2
herbie shell --seed 2020025 +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))))))))