\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.2811409873966666 \cdot 10^{-176}:\\
\;\;\;\;\frac{\sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}}{\sqrt[3]{a \cdot 2}} + \sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(g + \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{-1}{2}}{a}} \cdot \sqrt[3]{\left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}} + g} + \sqrt[3]{\frac{\frac{1}{2}}{a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}\\
\end{array}double f(double g, double h, double a) {
double r7487426 = 1.0;
double r7487427 = 2.0;
double r7487428 = a;
double r7487429 = r7487427 * r7487428;
double r7487430 = r7487426 / r7487429;
double r7487431 = g;
double r7487432 = -r7487431;
double r7487433 = r7487431 * r7487431;
double r7487434 = h;
double r7487435 = r7487434 * r7487434;
double r7487436 = r7487433 - r7487435;
double r7487437 = sqrt(r7487436);
double r7487438 = r7487432 + r7487437;
double r7487439 = r7487430 * r7487438;
double r7487440 = cbrt(r7487439);
double r7487441 = r7487432 - r7487437;
double r7487442 = r7487430 * r7487441;
double r7487443 = cbrt(r7487442);
double r7487444 = r7487440 + r7487443;
return r7487444;
}
double f(double g, double h, double a) {
double r7487445 = g;
double r7487446 = 2.2811409873966666e-176;
bool r7487447 = r7487445 <= r7487446;
double r7487448 = r7487445 * r7487445;
double r7487449 = h;
double r7487450 = r7487449 * r7487449;
double r7487451 = r7487448 - r7487450;
double r7487452 = sqrt(r7487451);
double r7487453 = r7487452 - r7487445;
double r7487454 = cbrt(r7487453);
double r7487455 = a;
double r7487456 = 2.0;
double r7487457 = r7487455 * r7487456;
double r7487458 = cbrt(r7487457);
double r7487459 = r7487454 / r7487458;
double r7487460 = -0.5;
double r7487461 = r7487460 / r7487455;
double r7487462 = r7487445 + r7487452;
double r7487463 = r7487461 * r7487462;
double r7487464 = cbrt(r7487463);
double r7487465 = r7487459 + r7487464;
double r7487466 = cbrt(r7487461);
double r7487467 = cbrt(r7487451);
double r7487468 = fabs(r7487467);
double r7487469 = sqrt(r7487467);
double r7487470 = r7487468 * r7487469;
double r7487471 = r7487470 + r7487445;
double r7487472 = cbrt(r7487471);
double r7487473 = r7487466 * r7487472;
double r7487474 = 0.5;
double r7487475 = r7487474 / r7487455;
double r7487476 = cbrt(r7487475);
double r7487477 = r7487476 * r7487454;
double r7487478 = r7487473 + r7487477;
double r7487479 = r7487447 ? r7487465 : r7487478;
return r7487479;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.2811409873966666e-176Initial program 36.3
Simplified36.3
rmApplied cbrt-div32.8
if 2.2811409873966666e-176 < g Initial program 33.5
Simplified33.5
rmApplied div-inv33.5
Applied cbrt-prod33.4
Simplified33.4
rmApplied cbrt-prod29.7
rmApplied add-cube-cbrt29.8
Applied sqrt-prod29.8
Simplified29.8
Final simplification31.4
herbie shell --seed 2019125 +o rules:numerics
(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))))))))