\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 7.991130677509223 \cdot 10^{-146}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{-\left(g + g\right)}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{-\left(\sqrt{g \cdot g - h \cdot h} + g\right)}{\frac{\sqrt[3]{a}}{\frac{1}{2}}}} \cdot \sqrt[3]{\frac{1}{\sqrt[3]{a}} \cdot \frac{1}{\sqrt[3]{a}}} + \frac{\sqrt[3]{g + \left(-g\right)}}{\sqrt[3]{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r5755434 = 1.0;
double r5755435 = 2.0;
double r5755436 = a;
double r5755437 = r5755435 * r5755436;
double r5755438 = r5755434 / r5755437;
double r5755439 = g;
double r5755440 = -r5755439;
double r5755441 = r5755439 * r5755439;
double r5755442 = h;
double r5755443 = r5755442 * r5755442;
double r5755444 = r5755441 - r5755443;
double r5755445 = sqrt(r5755444);
double r5755446 = r5755440 + r5755445;
double r5755447 = r5755438 * r5755446;
double r5755448 = cbrt(r5755447);
double r5755449 = r5755440 - r5755445;
double r5755450 = r5755438 * r5755449;
double r5755451 = cbrt(r5755450);
double r5755452 = r5755448 + r5755451;
return r5755452;
}
double f(double g, double h, double a) {
double r5755453 = g;
double r5755454 = 7.991130677509223e-146;
bool r5755455 = r5755453 <= r5755454;
double r5755456 = 1.0;
double r5755457 = a;
double r5755458 = 2.0;
double r5755459 = r5755457 * r5755458;
double r5755460 = r5755456 / r5755459;
double r5755461 = -r5755453;
double r5755462 = r5755453 * r5755453;
double r5755463 = h;
double r5755464 = r5755463 * r5755463;
double r5755465 = r5755462 - r5755464;
double r5755466 = sqrt(r5755465);
double r5755467 = r5755461 - r5755466;
double r5755468 = r5755460 * r5755467;
double r5755469 = cbrt(r5755468);
double r5755470 = r5755453 + r5755453;
double r5755471 = -r5755470;
double r5755472 = cbrt(r5755471);
double r5755473 = cbrt(r5755459);
double r5755474 = r5755472 / r5755473;
double r5755475 = r5755469 + r5755474;
double r5755476 = r5755466 + r5755453;
double r5755477 = -r5755476;
double r5755478 = cbrt(r5755457);
double r5755479 = 0.5;
double r5755480 = r5755478 / r5755479;
double r5755481 = r5755477 / r5755480;
double r5755482 = cbrt(r5755481);
double r5755483 = r5755456 / r5755478;
double r5755484 = r5755483 * r5755483;
double r5755485 = cbrt(r5755484);
double r5755486 = r5755482 * r5755485;
double r5755487 = r5755453 + r5755461;
double r5755488 = cbrt(r5755487);
double r5755489 = r5755488 / r5755473;
double r5755490 = r5755486 + r5755489;
double r5755491 = r5755455 ? r5755475 : r5755490;
return r5755491;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 7.991130677509223e-146Initial program 36.2
rmApplied associate-*l/36.2
Applied cbrt-div32.7
Taylor expanded around -inf 32.1
Simplified32.1
if 7.991130677509223e-146 < g Initial program 34.2
rmApplied associate-*l/34.2
Applied cbrt-div34.2
rmApplied add-cbrt-cube34.3
Simplified34.2
rmApplied *-un-lft-identity34.2
Applied add-cube-cbrt34.3
Applied times-frac34.3
Applied *-un-lft-identity34.3
Applied times-frac34.3
Applied cbrt-prod30.7
Simplified30.7
Taylor expanded around inf 30.6
Final simplification31.4
herbie shell --seed 2019146
(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))))))))