\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.776832660171497124288324412416908546106 \cdot 10^{-160}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{2 \cdot a}} + \sqrt[3]{\left(-g\right) - g} \cdot \sqrt[3]{\frac{\frac{1}{a}}{2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-1\right) \cdot \left(g + \sqrt{\left(g - h\right) \cdot \left(h + g\right)}\right)}}{\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 r112576 = 1.0;
double r112577 = 2.0;
double r112578 = a;
double r112579 = r112577 * r112578;
double r112580 = r112576 / r112579;
double r112581 = g;
double r112582 = -r112581;
double r112583 = r112581 * r112581;
double r112584 = h;
double r112585 = r112584 * r112584;
double r112586 = r112583 - r112585;
double r112587 = sqrt(r112586);
double r112588 = r112582 + r112587;
double r112589 = r112580 * r112588;
double r112590 = cbrt(r112589);
double r112591 = r112582 - r112587;
double r112592 = r112580 * r112591;
double r112593 = cbrt(r112592);
double r112594 = r112590 + r112593;
return r112594;
}
double f(double g, double h, double a) {
double r112595 = g;
double r112596 = 2.776832660171497e-160;
bool r112597 = r112595 <= r112596;
double r112598 = -r112595;
double r112599 = r112595 * r112595;
double r112600 = h;
double r112601 = r112600 * r112600;
double r112602 = r112599 - r112601;
double r112603 = sqrt(r112602);
double r112604 = r112598 - r112603;
double r112605 = 1.0;
double r112606 = 2.0;
double r112607 = a;
double r112608 = r112606 * r112607;
double r112609 = r112605 / r112608;
double r112610 = r112604 * r112609;
double r112611 = cbrt(r112610);
double r112612 = r112598 - r112595;
double r112613 = cbrt(r112612);
double r112614 = r112605 / r112607;
double r112615 = r112614 / r112606;
double r112616 = cbrt(r112615);
double r112617 = r112613 * r112616;
double r112618 = r112611 + r112617;
double r112619 = -r112605;
double r112620 = r112595 - r112600;
double r112621 = r112600 + r112595;
double r112622 = r112620 * r112621;
double r112623 = sqrt(r112622);
double r112624 = r112595 + r112623;
double r112625 = r112619 * r112624;
double r112626 = cbrt(r112625);
double r112627 = cbrt(r112608);
double r112628 = r112626 / r112627;
double r112629 = r112603 + r112598;
double r112630 = r112629 * r112609;
double r112631 = cbrt(r112630);
double r112632 = r112628 + r112631;
double r112633 = r112597 ? r112618 : r112632;
return r112633;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.776832660171497e-160Initial program 36.7
rmApplied cbrt-prod32.9
Simplified32.9
Simplified32.9
Taylor expanded around -inf 31.9
Simplified31.9
if 2.776832660171497e-160 < g Initial program 35.5
rmApplied associate-*l/35.5
Applied cbrt-div31.6
Simplified31.6
Simplified31.6
Final simplification31.8
herbie shell --seed 2019195
(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))))))))