\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.820567991238995 \cdot 10^{-157}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g\right) \cdot \frac{\frac{-1}{2}}{a}} + \sqrt[3]{\frac{\frac{1}{2}}{a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{1}{2}}{a} \cdot \left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} - g\right)} + \frac{\sqrt[3]{\left(\sqrt[3]{\frac{-1}{2}} \cdot \sqrt[3]{\frac{-1}{2}}\right) \cdot \left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g\right)}}{\sqrt[3]{\frac{a}{\sqrt[3]{\frac{-1}{2}}}}}\\
\end{array}double f(double g, double h, double a) {
double r8432691 = 1.0;
double r8432692 = 2.0;
double r8432693 = a;
double r8432694 = r8432692 * r8432693;
double r8432695 = r8432691 / r8432694;
double r8432696 = g;
double r8432697 = -r8432696;
double r8432698 = r8432696 * r8432696;
double r8432699 = h;
double r8432700 = r8432699 * r8432699;
double r8432701 = r8432698 - r8432700;
double r8432702 = sqrt(r8432701);
double r8432703 = r8432697 + r8432702;
double r8432704 = r8432695 * r8432703;
double r8432705 = cbrt(r8432704);
double r8432706 = r8432697 - r8432702;
double r8432707 = r8432695 * r8432706;
double r8432708 = cbrt(r8432707);
double r8432709 = r8432705 + r8432708;
return r8432709;
}
double f(double g, double h, double a) {
double r8432710 = g;
double r8432711 = 1.820567991238995e-157;
bool r8432712 = r8432710 <= r8432711;
double r8432713 = h;
double r8432714 = r8432713 + r8432710;
double r8432715 = r8432710 - r8432713;
double r8432716 = r8432714 * r8432715;
double r8432717 = sqrt(r8432716);
double r8432718 = r8432717 + r8432710;
double r8432719 = -0.5;
double r8432720 = a;
double r8432721 = r8432719 / r8432720;
double r8432722 = r8432718 * r8432721;
double r8432723 = cbrt(r8432722);
double r8432724 = 0.5;
double r8432725 = r8432724 / r8432720;
double r8432726 = cbrt(r8432725);
double r8432727 = -r8432710;
double r8432728 = r8432727 - r8432710;
double r8432729 = cbrt(r8432728);
double r8432730 = r8432726 * r8432729;
double r8432731 = r8432723 + r8432730;
double r8432732 = r8432717 - r8432710;
double r8432733 = r8432725 * r8432732;
double r8432734 = cbrt(r8432733);
double r8432735 = cbrt(r8432719);
double r8432736 = r8432735 * r8432735;
double r8432737 = r8432736 * r8432718;
double r8432738 = cbrt(r8432737);
double r8432739 = r8432720 / r8432735;
double r8432740 = cbrt(r8432739);
double r8432741 = r8432738 / r8432740;
double r8432742 = r8432734 + r8432741;
double r8432743 = r8432712 ? r8432731 : r8432742;
return r8432743;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.820567991238995e-157Initial program 35.6
Simplified35.6
rmApplied *-commutative35.6
Applied cbrt-prod31.8
Taylor expanded around -inf 31.0
Simplified31.0
if 1.820567991238995e-157 < g Initial program 33.4
Simplified33.4
rmApplied add-cube-cbrt33.4
Applied associate-/l*33.5
Applied associate-*l/33.5
Applied cbrt-div29.8
Final simplification30.5
herbie shell --seed 2019158
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))