\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 4.099263178664206 \cdot 10^{-157}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\left(-g\right) + \left(-g\right)} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + \left(-g\right)}\\
\end{array}double f(double g, double h, double a) {
double r5545508 = 1.0;
double r5545509 = 2.0;
double r5545510 = a;
double r5545511 = r5545509 * r5545510;
double r5545512 = r5545508 / r5545511;
double r5545513 = g;
double r5545514 = -r5545513;
double r5545515 = r5545513 * r5545513;
double r5545516 = h;
double r5545517 = r5545516 * r5545516;
double r5545518 = r5545515 - r5545517;
double r5545519 = sqrt(r5545518);
double r5545520 = r5545514 + r5545519;
double r5545521 = r5545512 * r5545520;
double r5545522 = cbrt(r5545521);
double r5545523 = r5545514 - r5545519;
double r5545524 = r5545512 * r5545523;
double r5545525 = cbrt(r5545524);
double r5545526 = r5545522 + r5545525;
return r5545526;
}
double f(double g, double h, double a) {
double r5545527 = g;
double r5545528 = 4.099263178664206e-157;
bool r5545529 = r5545527 <= r5545528;
double r5545530 = 1.0;
double r5545531 = 2.0;
double r5545532 = a;
double r5545533 = r5545531 * r5545532;
double r5545534 = r5545530 / r5545533;
double r5545535 = -r5545527;
double r5545536 = r5545527 * r5545527;
double r5545537 = h;
double r5545538 = r5545537 * r5545537;
double r5545539 = r5545536 - r5545538;
double r5545540 = sqrt(r5545539);
double r5545541 = r5545535 - r5545540;
double r5545542 = r5545534 * r5545541;
double r5545543 = cbrt(r5545542);
double r5545544 = r5545535 + r5545535;
double r5545545 = cbrt(r5545544);
double r5545546 = cbrt(r5545534);
double r5545547 = r5545545 * r5545546;
double r5545548 = r5545543 + r5545547;
double r5545549 = cbrt(r5545540);
double r5545550 = r5545549 * r5545549;
double r5545551 = r5545549 * r5545550;
double r5545552 = r5545535 - r5545551;
double r5545553 = cbrt(r5545552);
double r5545554 = r5545546 * r5545553;
double r5545555 = r5545540 + r5545535;
double r5545556 = cbrt(r5545555);
double r5545557 = r5545546 * r5545556;
double r5545558 = r5545554 + r5545557;
double r5545559 = r5545529 ? r5545548 : r5545558;
return r5545559;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 4.099263178664206e-157Initial program 35.6
rmApplied cbrt-prod31.8
Taylor expanded around -inf 31.0
Simplified31.0
if 4.099263178664206e-157 < g Initial program 33.4
rmApplied cbrt-prod33.4
rmApplied cbrt-prod29.7
rmApplied add-cube-cbrt29.7
Final simplification30.4
herbie shell --seed 2019158 +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))))))))