\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.856201020375248 \cdot 10^{-207}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{a \cdot 2}} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}} + \sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) + g\right)}\\
\end{array}double f(double g, double h, double a) {
double r4159600 = 1.0;
double r4159601 = 2.0;
double r4159602 = a;
double r4159603 = r4159601 * r4159602;
double r4159604 = r4159600 / r4159603;
double r4159605 = g;
double r4159606 = -r4159605;
double r4159607 = r4159605 * r4159605;
double r4159608 = h;
double r4159609 = r4159608 * r4159608;
double r4159610 = r4159607 - r4159609;
double r4159611 = sqrt(r4159610);
double r4159612 = r4159606 + r4159611;
double r4159613 = r4159604 * r4159612;
double r4159614 = cbrt(r4159613);
double r4159615 = r4159606 - r4159611;
double r4159616 = r4159604 * r4159615;
double r4159617 = cbrt(r4159616);
double r4159618 = r4159614 + r4159617;
return r4159618;
}
double f(double g, double h, double a) {
double r4159619 = g;
double r4159620 = 8.856201020375248e-207;
bool r4159621 = r4159619 <= r4159620;
double r4159622 = -r4159619;
double r4159623 = r4159619 * r4159619;
double r4159624 = h;
double r4159625 = r4159624 * r4159624;
double r4159626 = r4159623 - r4159625;
double r4159627 = sqrt(r4159626);
double r4159628 = r4159622 - r4159627;
double r4159629 = 1.0;
double r4159630 = a;
double r4159631 = 2.0;
double r4159632 = r4159630 * r4159631;
double r4159633 = r4159629 / r4159632;
double r4159634 = r4159628 * r4159633;
double r4159635 = cbrt(r4159634);
double r4159636 = r4159622 - r4159619;
double r4159637 = cbrt(r4159636);
double r4159638 = cbrt(r4159632);
double r4159639 = r4159637 / r4159638;
double r4159640 = r4159635 + r4159639;
double r4159641 = cbrt(r4159633);
double r4159642 = cbrt(r4159628);
double r4159643 = r4159641 * r4159642;
double r4159644 = r4159622 + r4159619;
double r4159645 = r4159633 * r4159644;
double r4159646 = cbrt(r4159645);
double r4159647 = r4159643 + r4159646;
double r4159648 = r4159621 ? r4159640 : r4159647;
return r4159648;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 8.856201020375248e-207Initial program 35.5
rmApplied associate-*l/35.5
Applied cbrt-div31.8
Simplified31.8
Taylor expanded around -inf 31.2
Simplified31.2
if 8.856201020375248e-207 < g Initial program 34.4
rmApplied cbrt-prod30.8
Taylor expanded around inf 30.6
Final simplification30.9
herbie shell --seed 2019130 +o rules:numerics
(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))))))))