\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.4942114245170744 \cdot 10^{-192}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{a \cdot 2}} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{elif}\;g \le 3.905389537008428 \cdot 10^{+37}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{a \cdot 2}} + \frac{\sqrt[3]{\frac{h \cdot h}{a \cdot 2}}}{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{a \cdot 2}} + \sqrt[3]{\left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r16379425 = 1.0;
double r16379426 = 2.0;
double r16379427 = a;
double r16379428 = r16379426 * r16379427;
double r16379429 = r16379425 / r16379428;
double r16379430 = g;
double r16379431 = -r16379430;
double r16379432 = r16379430 * r16379430;
double r16379433 = h;
double r16379434 = r16379433 * r16379433;
double r16379435 = r16379432 - r16379434;
double r16379436 = sqrt(r16379435);
double r16379437 = r16379431 + r16379436;
double r16379438 = r16379429 * r16379437;
double r16379439 = cbrt(r16379438);
double r16379440 = r16379431 - r16379436;
double r16379441 = r16379429 * r16379440;
double r16379442 = cbrt(r16379441);
double r16379443 = r16379439 + r16379442;
return r16379443;
}
double f(double g, double h, double a) {
double r16379444 = g;
double r16379445 = 2.4942114245170744e-192;
bool r16379446 = r16379444 <= r16379445;
double r16379447 = -r16379444;
double r16379448 = r16379444 * r16379444;
double r16379449 = h;
double r16379450 = r16379449 * r16379449;
double r16379451 = r16379448 - r16379450;
double r16379452 = sqrt(r16379451);
double r16379453 = r16379447 - r16379452;
double r16379454 = 1.0;
double r16379455 = a;
double r16379456 = 2.0;
double r16379457 = r16379455 * r16379456;
double r16379458 = r16379454 / r16379457;
double r16379459 = r16379453 * r16379458;
double r16379460 = cbrt(r16379459);
double r16379461 = r16379447 - r16379444;
double r16379462 = cbrt(r16379461);
double r16379463 = cbrt(r16379457);
double r16379464 = r16379462 / r16379463;
double r16379465 = r16379460 + r16379464;
double r16379466 = 3.905389537008428e+37;
bool r16379467 = r16379444 <= r16379466;
double r16379468 = r16379450 / r16379457;
double r16379469 = cbrt(r16379468);
double r16379470 = cbrt(r16379453);
double r16379471 = r16379469 / r16379470;
double r16379472 = r16379460 + r16379471;
double r16379473 = r16379470 / r16379463;
double r16379474 = r16379447 + r16379452;
double r16379475 = r16379474 * r16379458;
double r16379476 = cbrt(r16379475);
double r16379477 = r16379473 + r16379476;
double r16379478 = r16379467 ? r16379472 : r16379477;
double r16379479 = r16379446 ? r16379465 : r16379478;
return r16379479;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.4942114245170744e-192Initial program 36.0
rmApplied associate-*l/36.0
Applied cbrt-div32.4
Simplified32.4
Taylor expanded around -inf 31.7
Simplified31.7
if 2.4942114245170744e-192 < g < 3.905389537008428e+37Initial program 11.6
rmApplied flip-+11.1
Applied associate-*r/11.1
Applied cbrt-div11.1
Simplified10.1
if 3.905389537008428e+37 < g Initial program 43.5
rmApplied associate-*l/43.5
Applied cbrt-div40.5
Simplified40.5
Final simplification31.7
herbie shell --seed 2019112 +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))))))))