\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 8.889202414083867012167858399548234734645 \cdot 10^{-196}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{-\left(g + g\right)} \cdot \sqrt[3]{\frac{1}{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{\left(\left(-g\right) - \sqrt{\sqrt[3]{g \cdot g - h \cdot h}} \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h} \cdot \sqrt[3]{g \cdot g - h \cdot h}}\right) \cdot 1}}{\sqrt[3]{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r5997416 = 1.0;
double r5997417 = 2.0;
double r5997418 = a;
double r5997419 = r5997417 * r5997418;
double r5997420 = r5997416 / r5997419;
double r5997421 = g;
double r5997422 = -r5997421;
double r5997423 = r5997421 * r5997421;
double r5997424 = h;
double r5997425 = r5997424 * r5997424;
double r5997426 = r5997423 - r5997425;
double r5997427 = sqrt(r5997426);
double r5997428 = r5997422 + r5997427;
double r5997429 = r5997420 * r5997428;
double r5997430 = cbrt(r5997429);
double r5997431 = r5997422 - r5997427;
double r5997432 = r5997420 * r5997431;
double r5997433 = cbrt(r5997432);
double r5997434 = r5997430 + r5997433;
return r5997434;
}
double f(double g, double h, double a) {
double r5997435 = g;
double r5997436 = 8.889202414083867e-196;
bool r5997437 = r5997435 <= r5997436;
double r5997438 = 1.0;
double r5997439 = a;
double r5997440 = 2.0;
double r5997441 = r5997439 * r5997440;
double r5997442 = r5997438 / r5997441;
double r5997443 = -r5997435;
double r5997444 = r5997435 * r5997435;
double r5997445 = h;
double r5997446 = r5997445 * r5997445;
double r5997447 = r5997444 - r5997446;
double r5997448 = sqrt(r5997447);
double r5997449 = r5997443 - r5997448;
double r5997450 = r5997442 * r5997449;
double r5997451 = cbrt(r5997450);
double r5997452 = r5997435 + r5997435;
double r5997453 = -r5997452;
double r5997454 = cbrt(r5997453);
double r5997455 = cbrt(r5997442);
double r5997456 = r5997454 * r5997455;
double r5997457 = r5997451 + r5997456;
double r5997458 = r5997443 + r5997448;
double r5997459 = r5997442 * r5997458;
double r5997460 = cbrt(r5997459);
double r5997461 = cbrt(r5997447);
double r5997462 = sqrt(r5997461);
double r5997463 = r5997461 * r5997461;
double r5997464 = sqrt(r5997463);
double r5997465 = r5997462 * r5997464;
double r5997466 = r5997443 - r5997465;
double r5997467 = r5997466 * r5997438;
double r5997468 = cbrt(r5997467);
double r5997469 = cbrt(r5997441);
double r5997470 = r5997468 / r5997469;
double r5997471 = r5997460 + r5997470;
double r5997472 = r5997437 ? r5997457 : r5997471;
return r5997472;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 8.889202414083867e-196Initial program 37.4
rmApplied cbrt-prod34.0
Taylor expanded around -inf 33.0
Simplified33.0
if 8.889202414083867e-196 < g Initial program 35.2
rmApplied associate-*l/35.1
Applied cbrt-div31.2
rmApplied add-cube-cbrt31.2
Applied sqrt-prod31.2
Final simplification32.2
herbie shell --seed 2019200 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))