\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 -4.0637197773556724 \cdot 10^{-160}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + \left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}}\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)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r174563 = 1.0;
double r174564 = 2.0;
double r174565 = a;
double r174566 = r174564 * r174565;
double r174567 = r174563 / r174566;
double r174568 = g;
double r174569 = -r174568;
double r174570 = r174568 * r174568;
double r174571 = h;
double r174572 = r174571 * r174571;
double r174573 = r174570 - r174572;
double r174574 = sqrt(r174573);
double r174575 = r174569 + r174574;
double r174576 = r174567 * r174575;
double r174577 = cbrt(r174576);
double r174578 = r174569 - r174574;
double r174579 = r174567 * r174578;
double r174580 = cbrt(r174579);
double r174581 = r174577 + r174580;
return r174581;
}
double f(double g, double h, double a) {
double r174582 = g;
double r174583 = -4.0637197773556724e-160;
bool r174584 = r174582 <= r174583;
double r174585 = 1.0;
double r174586 = -r174582;
double r174587 = r174582 * r174582;
double r174588 = h;
double r174589 = r174588 * r174588;
double r174590 = r174587 - r174589;
double r174591 = cbrt(r174590);
double r174592 = fabs(r174591);
double r174593 = sqrt(r174591);
double r174594 = r174592 * r174593;
double r174595 = r174586 + r174594;
double r174596 = r174585 * r174595;
double r174597 = cbrt(r174596);
double r174598 = 2.0;
double r174599 = a;
double r174600 = r174598 * r174599;
double r174601 = cbrt(r174600);
double r174602 = r174597 / r174601;
double r174603 = r174585 / r174600;
double r174604 = sqrt(r174590);
double r174605 = r174586 - r174604;
double r174606 = r174603 * r174605;
double r174607 = cbrt(r174606);
double r174608 = r174602 + r174607;
double r174609 = r174586 + r174604;
double r174610 = r174603 * r174609;
double r174611 = cbrt(r174610);
double r174612 = cbrt(r174603);
double r174613 = r174586 - r174582;
double r174614 = cbrt(r174613);
double r174615 = r174612 * r174614;
double r174616 = r174611 + r174615;
double r174617 = r174584 ? r174608 : r174616;
return r174617;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -4.0637197773556724e-160Initial program 35.0
rmApplied associate-*l/35.0
Applied cbrt-div31.4
rmApplied add-cube-cbrt31.5
Applied sqrt-prod31.5
Simplified31.5
if -4.0637197773556724e-160 < g Initial program 37.2
rmApplied cbrt-prod33.6
Taylor expanded around inf 32.2
Final simplification31.8
herbie shell --seed 2020027
(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))))))))