\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.046386169330917036562924916779548437566 \cdot 10^{-159}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \sqrt{g \cdot g - h \cdot h}} + \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 r146423 = 1.0;
double r146424 = 2.0;
double r146425 = a;
double r146426 = r146424 * r146425;
double r146427 = r146423 / r146426;
double r146428 = g;
double r146429 = -r146428;
double r146430 = r146428 * r146428;
double r146431 = h;
double r146432 = r146431 * r146431;
double r146433 = r146430 - r146432;
double r146434 = sqrt(r146433);
double r146435 = r146429 + r146434;
double r146436 = r146427 * r146435;
double r146437 = cbrt(r146436);
double r146438 = r146429 - r146434;
double r146439 = r146427 * r146438;
double r146440 = cbrt(r146439);
double r146441 = r146437 + r146440;
return r146441;
}
double f(double g, double h, double a) {
double r146442 = g;
double r146443 = -2.046386169330917e-159;
bool r146444 = r146442 <= r146443;
double r146445 = 1.0;
double r146446 = 2.0;
double r146447 = a;
double r146448 = r146446 * r146447;
double r146449 = r146445 / r146448;
double r146450 = cbrt(r146449);
double r146451 = -r146442;
double r146452 = r146442 * r146442;
double r146453 = h;
double r146454 = r146453 * r146453;
double r146455 = r146452 - r146454;
double r146456 = sqrt(r146455);
double r146457 = r146451 + r146456;
double r146458 = cbrt(r146457);
double r146459 = r146450 * r146458;
double r146460 = r146451 - r146456;
double r146461 = r146449 * r146460;
double r146462 = cbrt(r146461);
double r146463 = r146459 + r146462;
double r146464 = r146449 * r146457;
double r146465 = cbrt(r146464);
double r146466 = r146451 - r146442;
double r146467 = cbrt(r146466);
double r146468 = r146450 * r146467;
double r146469 = r146465 + r146468;
double r146470 = r146444 ? r146463 : r146469;
return r146470;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.046386169330917e-159Initial program 34.9
rmApplied cbrt-prod31.3
if -2.046386169330917e-159 < g Initial program 36.5
rmApplied cbrt-prod32.9
Taylor expanded around inf 31.9
Final simplification31.6
herbie shell --seed 2020001
(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))))))))