\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 -3.36990631911046447165102272934803478987 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \sqrt{\left(g + h\right) \cdot \left(g - h\right)}} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - -1 \cdot g\right)}}{\sqrt[3]{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - g\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r150391 = 1.0;
double r150392 = 2.0;
double r150393 = a;
double r150394 = r150392 * r150393;
double r150395 = r150391 / r150394;
double r150396 = g;
double r150397 = -r150396;
double r150398 = r150396 * r150396;
double r150399 = h;
double r150400 = r150399 * r150399;
double r150401 = r150398 - r150400;
double r150402 = sqrt(r150401);
double r150403 = r150397 + r150402;
double r150404 = r150395 * r150403;
double r150405 = cbrt(r150404);
double r150406 = r150397 - r150402;
double r150407 = r150395 * r150406;
double r150408 = cbrt(r150407);
double r150409 = r150405 + r150408;
return r150409;
}
double f(double g, double h, double a) {
double r150410 = g;
double r150411 = -3.3699063191104645e-158;
bool r150412 = r150410 <= r150411;
double r150413 = 1.0;
double r150414 = 2.0;
double r150415 = a;
double r150416 = r150414 * r150415;
double r150417 = r150413 / r150416;
double r150418 = cbrt(r150417);
double r150419 = -r150410;
double r150420 = h;
double r150421 = r150410 + r150420;
double r150422 = r150410 - r150420;
double r150423 = r150421 * r150422;
double r150424 = sqrt(r150423);
double r150425 = r150419 + r150424;
double r150426 = cbrt(r150425);
double r150427 = r150418 * r150426;
double r150428 = -1.0;
double r150429 = r150428 * r150410;
double r150430 = r150419 - r150429;
double r150431 = r150413 * r150430;
double r150432 = cbrt(r150431);
double r150433 = cbrt(r150416);
double r150434 = r150432 / r150433;
double r150435 = r150427 + r150434;
double r150436 = r150410 * r150410;
double r150437 = r150420 * r150420;
double r150438 = r150436 - r150437;
double r150439 = sqrt(r150438);
double r150440 = r150419 + r150439;
double r150441 = r150417 * r150440;
double r150442 = cbrt(r150441);
double r150443 = r150419 - r150410;
double r150444 = r150413 * r150443;
double r150445 = cbrt(r150444);
double r150446 = r150445 / r150433;
double r150447 = r150442 + r150446;
double r150448 = r150412 ? r150435 : r150447;
return r150448;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.3699063191104645e-158Initial program 35.4
rmApplied associate-*l/35.4
Applied cbrt-div35.4
rmApplied cbrt-prod31.7
rmApplied difference-of-squares31.7
Taylor expanded around -inf 32.0
if -3.3699063191104645e-158 < g Initial program 36.3
rmApplied associate-*l/36.3
Applied cbrt-div32.9
Taylor expanded around inf 31.8
Final simplification31.9
herbie shell --seed 2019318
(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))))))))