\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 \frac{-7668730552014267}{3.16582913885573803597443226905148403245 \cdot 10^{175}}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right) \cdot \sqrt[3]{\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 r154478 = 1.0;
double r154479 = 2.0;
double r154480 = a;
double r154481 = r154479 * r154480;
double r154482 = r154478 / r154481;
double r154483 = g;
double r154484 = -r154483;
double r154485 = r154483 * r154483;
double r154486 = h;
double r154487 = r154486 * r154486;
double r154488 = r154485 - r154487;
double r154489 = sqrt(r154488);
double r154490 = r154484 + r154489;
double r154491 = r154482 * r154490;
double r154492 = cbrt(r154491);
double r154493 = r154484 - r154489;
double r154494 = r154482 * r154493;
double r154495 = cbrt(r154494);
double r154496 = r154492 + r154495;
return r154496;
}
double f(double g, double h, double a) {
double r154497 = g;
double r154498 = -7668730552014267.0;
double r154499 = 3.165829138855738e+175;
double r154500 = r154498 / r154499;
bool r154501 = r154497 <= r154500;
double r154502 = 1.0;
double r154503 = 2.0;
double r154504 = a;
double r154505 = r154503 * r154504;
double r154506 = r154502 / r154505;
double r154507 = cbrt(r154506);
double r154508 = -r154497;
double r154509 = r154497 * r154497;
double r154510 = h;
double r154511 = r154510 * r154510;
double r154512 = r154509 - r154511;
double r154513 = sqrt(r154512);
double r154514 = cbrt(r154513);
double r154515 = r154514 * r154514;
double r154516 = r154515 * r154514;
double r154517 = r154508 + r154516;
double r154518 = cbrt(r154517);
double r154519 = r154507 * r154518;
double r154520 = r154508 - r154513;
double r154521 = r154506 * r154520;
double r154522 = cbrt(r154521);
double r154523 = r154519 + r154522;
double r154524 = r154508 + r154513;
double r154525 = r154506 * r154524;
double r154526 = cbrt(r154525);
double r154527 = r154508 - r154497;
double r154528 = cbrt(r154527);
double r154529 = r154507 * r154528;
double r154530 = r154526 + r154529;
double r154531 = r154501 ? r154523 : r154530;
return r154531;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.4223450526411114e-160Initial program 35.0
rmApplied cbrt-prod31.2
rmApplied add-cube-cbrt31.2
if -2.4223450526411114e-160 < g Initial program 37.6
rmApplied cbrt-prod33.8
Taylor expanded around inf 32.5
Final simplification31.9
herbie shell --seed 2019304
(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))))))))