\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 5.209462070880178 \cdot 10^{-156}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(\sqrt{g \cdot g - h \cdot h} + g\right)} + \sqrt[3]{\frac{\left(-g\right) - g}{2}} \cdot \sqrt[3]{\frac{1}{a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + g\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}} + \sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r4627624 = 1.0;
double r4627625 = 2.0;
double r4627626 = a;
double r4627627 = r4627625 * r4627626;
double r4627628 = r4627624 / r4627627;
double r4627629 = g;
double r4627630 = -r4627629;
double r4627631 = r4627629 * r4627629;
double r4627632 = h;
double r4627633 = r4627632 * r4627632;
double r4627634 = r4627631 - r4627633;
double r4627635 = sqrt(r4627634);
double r4627636 = r4627630 + r4627635;
double r4627637 = r4627628 * r4627636;
double r4627638 = cbrt(r4627637);
double r4627639 = r4627630 - r4627635;
double r4627640 = r4627628 * r4627639;
double r4627641 = cbrt(r4627640);
double r4627642 = r4627638 + r4627641;
return r4627642;
}
double f(double g, double h, double a) {
double r4627643 = g;
double r4627644 = 5.209462070880178e-156;
bool r4627645 = r4627643 <= r4627644;
double r4627646 = -0.5;
double r4627647 = a;
double r4627648 = r4627646 / r4627647;
double r4627649 = r4627643 * r4627643;
double r4627650 = h;
double r4627651 = r4627650 * r4627650;
double r4627652 = r4627649 - r4627651;
double r4627653 = sqrt(r4627652);
double r4627654 = r4627653 + r4627643;
double r4627655 = r4627648 * r4627654;
double r4627656 = cbrt(r4627655);
double r4627657 = -r4627643;
double r4627658 = r4627657 - r4627643;
double r4627659 = 2.0;
double r4627660 = r4627658 / r4627659;
double r4627661 = cbrt(r4627660);
double r4627662 = 1.0;
double r4627663 = r4627662 / r4627647;
double r4627664 = cbrt(r4627663);
double r4627665 = r4627661 * r4627664;
double r4627666 = r4627656 + r4627665;
double r4627667 = r4627654 * r4627646;
double r4627668 = cbrt(r4627667);
double r4627669 = cbrt(r4627647);
double r4627670 = r4627668 / r4627669;
double r4627671 = r4627653 - r4627643;
double r4627672 = r4627647 * r4627659;
double r4627673 = r4627671 / r4627672;
double r4627674 = cbrt(r4627673);
double r4627675 = r4627670 + r4627674;
double r4627676 = r4627645 ? r4627666 : r4627675;
return r4627676;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 5.209462070880178e-156Initial program 36.0
Simplified36.0
rmApplied *-un-lft-identity36.0
Applied times-frac36.0
Applied cbrt-prod32.1
Taylor expanded around -inf 31.3
Simplified31.3
if 5.209462070880178e-156 < g Initial program 34.7
Simplified34.7
rmApplied associate-*r/34.7
Applied cbrt-div31.1
Final simplification31.2
herbie shell --seed 2019149
(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))))))))