\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.0197648282366805 \cdot 10^{-191}:\\
\;\;\;\;\frac{\sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{\left(-g\right) - \left(-g\right)}}{\sqrt[3]{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r5460437 = 1.0;
double r5460438 = 2.0;
double r5460439 = a;
double r5460440 = r5460438 * r5460439;
double r5460441 = r5460437 / r5460440;
double r5460442 = g;
double r5460443 = -r5460442;
double r5460444 = r5460442 * r5460442;
double r5460445 = h;
double r5460446 = r5460445 * r5460445;
double r5460447 = r5460444 - r5460446;
double r5460448 = sqrt(r5460447);
double r5460449 = r5460443 + r5460448;
double r5460450 = r5460441 * r5460449;
double r5460451 = cbrt(r5460450);
double r5460452 = r5460443 - r5460448;
double r5460453 = r5460441 * r5460452;
double r5460454 = cbrt(r5460453);
double r5460455 = r5460451 + r5460454;
return r5460455;
}
double f(double g, double h, double a) {
double r5460456 = g;
double r5460457 = -1.0197648282366805e-191;
bool r5460458 = r5460456 <= r5460457;
double r5460459 = r5460456 * r5460456;
double r5460460 = h;
double r5460461 = r5460460 * r5460460;
double r5460462 = r5460459 - r5460461;
double r5460463 = sqrt(r5460462);
double r5460464 = r5460463 - r5460456;
double r5460465 = cbrt(r5460464);
double r5460466 = 2.0;
double r5460467 = a;
double r5460468 = r5460466 * r5460467;
double r5460469 = cbrt(r5460468);
double r5460470 = r5460465 / r5460469;
double r5460471 = -r5460456;
double r5460472 = r5460471 - r5460471;
double r5460473 = cbrt(r5460472);
double r5460474 = r5460473 / r5460469;
double r5460475 = r5460470 + r5460474;
double r5460476 = r5460471 - r5460456;
double r5460477 = cbrt(r5460476);
double r5460478 = r5460477 / r5460469;
double r5460479 = r5460463 + r5460471;
double r5460480 = 1.0;
double r5460481 = r5460480 / r5460468;
double r5460482 = r5460479 * r5460481;
double r5460483 = cbrt(r5460482);
double r5460484 = r5460478 + r5460483;
double r5460485 = r5460458 ? r5460475 : r5460484;
return r5460485;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.0197648282366805e-191Initial program 34.9
rmApplied associate-*l/34.9
Applied cbrt-div34.8
rmApplied associate-*l/34.8
Applied cbrt-div30.9
Simplified30.9
Taylor expanded around -inf 30.7
Simplified30.7
if -1.0197648282366805e-191 < g Initial program 36.8
rmApplied associate-*l/36.8
Applied cbrt-div33.1
Taylor expanded around inf 32.6
Final simplification31.7
herbie shell --seed 2019168
(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))))))))