\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.10518339907436567 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\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 \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r168568 = 1.0;
double r168569 = 2.0;
double r168570 = a;
double r168571 = r168569 * r168570;
double r168572 = r168568 / r168571;
double r168573 = g;
double r168574 = -r168573;
double r168575 = r168573 * r168573;
double r168576 = h;
double r168577 = r168576 * r168576;
double r168578 = r168575 - r168577;
double r168579 = sqrt(r168578);
double r168580 = r168574 + r168579;
double r168581 = r168572 * r168580;
double r168582 = cbrt(r168581);
double r168583 = r168574 - r168579;
double r168584 = r168572 * r168583;
double r168585 = cbrt(r168584);
double r168586 = r168582 + r168585;
return r168586;
}
double f(double g, double h, double a) {
double r168587 = g;
double r168588 = -2.1051833990743657e-158;
bool r168589 = r168587 <= r168588;
double r168590 = 1.0;
double r168591 = 2.0;
double r168592 = a;
double r168593 = r168591 * r168592;
double r168594 = r168590 / r168593;
double r168595 = cbrt(r168594);
double r168596 = -r168587;
double r168597 = r168587 * r168587;
double r168598 = h;
double r168599 = r168598 * r168598;
double r168600 = r168597 - r168599;
double r168601 = cbrt(r168600);
double r168602 = fabs(r168601);
double r168603 = sqrt(r168601);
double r168604 = r168602 * r168603;
double r168605 = r168596 + r168604;
double r168606 = cbrt(r168605);
double r168607 = r168595 * r168606;
double r168608 = sqrt(r168600);
double r168609 = r168596 - r168608;
double r168610 = cbrt(r168609);
double r168611 = r168595 * r168610;
double r168612 = r168607 + r168611;
double r168613 = r168596 + r168608;
double r168614 = r168594 * r168613;
double r168615 = cbrt(r168614);
double r168616 = r168596 - r168587;
double r168617 = cbrt(r168616);
double r168618 = r168595 * r168617;
double r168619 = r168615 + r168618;
double r168620 = r168589 ? r168612 : r168619;
return r168620;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.1051833990743657e-158Initial program 33.7
rmApplied cbrt-prod33.7
rmApplied cbrt-prod30.1
rmApplied add-cube-cbrt30.1
Applied sqrt-prod30.1
Simplified30.1
if -2.1051833990743657e-158 < g Initial program 37.1
rmApplied cbrt-prod33.6
Taylor expanded around inf 32.2
Final simplification31.2
herbie shell --seed 2020060
(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))))))))