\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 -6.3921017940024375 \cdot 10^{-161}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{-1}{2}}{a}} \cdot \sqrt[3]{\frac{g \cdot g - \left(g - h\right) \cdot \left(h + g\right)}{g - \sqrt{\left(g - h\right) \cdot \left(h + g\right)}}} + \frac{\sqrt[3]{\frac{1}{2} \cdot \left(\sqrt{\left(g - h\right) \cdot \left(h + g\right)} - g\right)}}{\sqrt[3]{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{\left(g - h\right) \cdot \left(h + g\right)} - g}{a} \cdot \frac{1}{2}} + \sqrt[3]{g + g} \cdot \sqrt[3]{\frac{\frac{-1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r5012537 = 1.0;
double r5012538 = 2.0;
double r5012539 = a;
double r5012540 = r5012538 * r5012539;
double r5012541 = r5012537 / r5012540;
double r5012542 = g;
double r5012543 = -r5012542;
double r5012544 = r5012542 * r5012542;
double r5012545 = h;
double r5012546 = r5012545 * r5012545;
double r5012547 = r5012544 - r5012546;
double r5012548 = sqrt(r5012547);
double r5012549 = r5012543 + r5012548;
double r5012550 = r5012541 * r5012549;
double r5012551 = cbrt(r5012550);
double r5012552 = r5012543 - r5012548;
double r5012553 = r5012541 * r5012552;
double r5012554 = cbrt(r5012553);
double r5012555 = r5012551 + r5012554;
return r5012555;
}
double f(double g, double h, double a) {
double r5012556 = g;
double r5012557 = -6.3921017940024375e-161;
bool r5012558 = r5012556 <= r5012557;
double r5012559 = -0.5;
double r5012560 = a;
double r5012561 = r5012559 / r5012560;
double r5012562 = cbrt(r5012561);
double r5012563 = r5012556 * r5012556;
double r5012564 = h;
double r5012565 = r5012556 - r5012564;
double r5012566 = r5012564 + r5012556;
double r5012567 = r5012565 * r5012566;
double r5012568 = r5012563 - r5012567;
double r5012569 = sqrt(r5012567);
double r5012570 = r5012556 - r5012569;
double r5012571 = r5012568 / r5012570;
double r5012572 = cbrt(r5012571);
double r5012573 = r5012562 * r5012572;
double r5012574 = 0.5;
double r5012575 = r5012569 - r5012556;
double r5012576 = r5012574 * r5012575;
double r5012577 = cbrt(r5012576);
double r5012578 = cbrt(r5012560);
double r5012579 = r5012577 / r5012578;
double r5012580 = r5012573 + r5012579;
double r5012581 = r5012575 / r5012560;
double r5012582 = r5012581 * r5012574;
double r5012583 = cbrt(r5012582);
double r5012584 = r5012556 + r5012556;
double r5012585 = cbrt(r5012584);
double r5012586 = r5012585 * r5012562;
double r5012587 = r5012583 + r5012586;
double r5012588 = r5012558 ? r5012580 : r5012587;
return r5012588;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -6.3921017940024375e-161Initial program 34.4
Simplified34.4
rmApplied cbrt-prod34.3
rmApplied associate-*l/34.3
Applied cbrt-div30.4
rmApplied flip-+30.2
Simplified30.2
if -6.3921017940024375e-161 < g Initial program 36.2
Simplified36.2
rmApplied cbrt-prod32.5
Taylor expanded around inf 31.3
Final simplification30.8
herbie shell --seed 2019162 +o rules:numerics
(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))))))))