\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 -1.2934885954313043 \cdot 10^{-169}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \left(-g\right)\right)}}{\sqrt[3]{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\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 r83431 = 1.0;
double r83432 = 2.0;
double r83433 = a;
double r83434 = r83432 * r83433;
double r83435 = r83431 / r83434;
double r83436 = g;
double r83437 = -r83436;
double r83438 = r83436 * r83436;
double r83439 = h;
double r83440 = r83439 * r83439;
double r83441 = r83438 - r83440;
double r83442 = sqrt(r83441);
double r83443 = r83437 + r83442;
double r83444 = r83435 * r83443;
double r83445 = cbrt(r83444);
double r83446 = r83437 - r83442;
double r83447 = r83435 * r83446;
double r83448 = cbrt(r83447);
double r83449 = r83445 + r83448;
return r83449;
}
double f(double g, double h, double a) {
double r83450 = g;
double r83451 = -1.2934885954313043e-169;
bool r83452 = r83450 <= r83451;
double r83453 = 1.0;
double r83454 = r83450 * r83450;
double r83455 = h;
double r83456 = r83455 * r83455;
double r83457 = r83454 - r83456;
double r83458 = sqrt(r83457);
double r83459 = r83458 - r83450;
double r83460 = r83453 * r83459;
double r83461 = cbrt(r83460);
double r83462 = 2.0;
double r83463 = a;
double r83464 = r83462 * r83463;
double r83465 = cbrt(r83464);
double r83466 = r83461 / r83465;
double r83467 = -r83450;
double r83468 = r83467 - r83467;
double r83469 = r83453 * r83468;
double r83470 = cbrt(r83469);
double r83471 = r83470 / r83465;
double r83472 = r83466 + r83471;
double r83473 = r83453 / r83464;
double r83474 = r83473 * r83459;
double r83475 = cbrt(r83474);
double r83476 = r83467 - r83450;
double r83477 = r83453 * r83476;
double r83478 = cbrt(r83477);
double r83479 = r83478 / r83465;
double r83480 = r83475 + r83479;
double r83481 = r83452 ? r83472 : r83480;
return r83481;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.2934885954313043e-169Initial program 34.8
Simplified34.8
rmApplied associate-*l/34.8
Applied cbrt-div34.7
rmApplied associate-*l/34.7
Applied cbrt-div30.9
Taylor expanded around -inf 31.2
Simplified31.2
if -1.2934885954313043e-169 < g Initial program 37.2
Simplified37.2
rmApplied associate-*l/37.2
Applied cbrt-div33.2
Taylor expanded around inf 31.9
Final simplification31.6
herbie shell --seed 2020045 +o rules:numerics
(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))))))))