\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 -2.10518339907436567 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\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 r152531 = 1.0;
double r152532 = 2.0;
double r152533 = a;
double r152534 = r152532 * r152533;
double r152535 = r152531 / r152534;
double r152536 = g;
double r152537 = -r152536;
double r152538 = r152536 * r152536;
double r152539 = h;
double r152540 = r152539 * r152539;
double r152541 = r152538 - r152540;
double r152542 = sqrt(r152541);
double r152543 = r152537 + r152542;
double r152544 = r152535 * r152543;
double r152545 = cbrt(r152544);
double r152546 = r152537 - r152542;
double r152547 = r152535 * r152546;
double r152548 = cbrt(r152547);
double r152549 = r152545 + r152548;
return r152549;
}
double f(double g, double h, double a) {
double r152550 = g;
double r152551 = -2.1051833990743657e-158;
bool r152552 = r152550 <= r152551;
double r152553 = 1.0;
double r152554 = 2.0;
double r152555 = a;
double r152556 = r152554 * r152555;
double r152557 = r152553 / r152556;
double r152558 = cbrt(r152557);
double r152559 = -r152550;
double r152560 = r152550 * r152550;
double r152561 = h;
double r152562 = r152561 * r152561;
double r152563 = r152560 - r152562;
double r152564 = cbrt(r152563);
double r152565 = fabs(r152564);
double r152566 = sqrt(r152564);
double r152567 = r152565 * r152566;
double r152568 = r152559 + r152567;
double r152569 = cbrt(r152568);
double r152570 = r152558 * r152569;
double r152571 = sqrt(r152563);
double r152572 = r152559 - r152571;
double r152573 = cbrt(r152572);
double r152574 = r152558 * r152573;
double r152575 = r152570 + r152574;
double r152576 = r152559 + r152571;
double r152577 = r152557 * r152576;
double r152578 = cbrt(r152577);
double r152579 = r152559 - r152550;
double r152580 = cbrt(r152579);
double r152581 = r152558 * r152580;
double r152582 = r152578 + r152581;
double r152583 = r152552 ? r152575 : r152582;
return r152583;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.1051833990743657e-158Initial program 33.7
rmApplied cbrt-prod33.7
rmApplied cbrt-prod30.1
rmApplied add-cube-cbrt30.1
Applied sqrt-prod30.1
Simplified30.1
if -2.1051833990743657e-158 < g Initial program 37.1
rmApplied cbrt-prod33.6
Taylor expanded around inf 32.2
Final simplification31.2
herbie shell --seed 2020060 +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))))))))