\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.578437290860725688762688654467523893552 \cdot 10^{-162}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{1}{a} \cdot \frac{h \cdot h}{2}}}{\sqrt[3]{\left(-g\right) + \sqrt{g \cdot g - h \cdot h}}} + \frac{\sqrt[3]{\left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right) \cdot 1}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot 1}}{\sqrt[3]{a \cdot 2}} + \sqrt[3]{\left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r4561682 = 1.0;
double r4561683 = 2.0;
double r4561684 = a;
double r4561685 = r4561683 * r4561684;
double r4561686 = r4561682 / r4561685;
double r4561687 = g;
double r4561688 = -r4561687;
double r4561689 = r4561687 * r4561687;
double r4561690 = h;
double r4561691 = r4561690 * r4561690;
double r4561692 = r4561689 - r4561691;
double r4561693 = sqrt(r4561692);
double r4561694 = r4561688 + r4561693;
double r4561695 = r4561686 * r4561694;
double r4561696 = cbrt(r4561695);
double r4561697 = r4561688 - r4561693;
double r4561698 = r4561686 * r4561697;
double r4561699 = cbrt(r4561698);
double r4561700 = r4561696 + r4561699;
return r4561700;
}
double f(double g, double h, double a) {
double r4561701 = g;
double r4561702 = 1.5784372908607257e-162;
bool r4561703 = r4561701 <= r4561702;
double r4561704 = 1.0;
double r4561705 = a;
double r4561706 = r4561704 / r4561705;
double r4561707 = h;
double r4561708 = r4561707 * r4561707;
double r4561709 = 2.0;
double r4561710 = r4561708 / r4561709;
double r4561711 = r4561706 * r4561710;
double r4561712 = cbrt(r4561711);
double r4561713 = -r4561701;
double r4561714 = r4561701 * r4561701;
double r4561715 = r4561714 - r4561708;
double r4561716 = sqrt(r4561715);
double r4561717 = r4561713 + r4561716;
double r4561718 = cbrt(r4561717);
double r4561719 = r4561712 / r4561718;
double r4561720 = r4561717 * r4561704;
double r4561721 = cbrt(r4561720);
double r4561722 = r4561705 * r4561709;
double r4561723 = cbrt(r4561722);
double r4561724 = r4561721 / r4561723;
double r4561725 = r4561719 + r4561724;
double r4561726 = r4561713 - r4561716;
double r4561727 = r4561726 * r4561704;
double r4561728 = cbrt(r4561727);
double r4561729 = r4561728 / r4561723;
double r4561730 = r4561704 / r4561722;
double r4561731 = r4561717 * r4561730;
double r4561732 = cbrt(r4561731);
double r4561733 = r4561729 + r4561732;
double r4561734 = r4561703 ? r4561725 : r4561733;
return r4561734;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.5784372908607257e-162Initial program 37.3
rmApplied associate-*l/37.3
Applied cbrt-div33.8
rmApplied flip--33.7
Applied associate-*r/33.7
Applied cbrt-div33.7
Simplified33.8
if 1.5784372908607257e-162 < g Initial program 34.9
rmApplied associate-*l/34.9
Applied cbrt-div31.2
Final simplification32.6
herbie shell --seed 2019171
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))