\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 -8.762222041795176540314702179228472702929 \cdot 10^{-159}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g} + \left(\sqrt[3]{\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}} \cdot \sqrt[3]{\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}\right) \cdot \sqrt[3]{\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - g\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r172739 = 1.0;
double r172740 = 2.0;
double r172741 = a;
double r172742 = r172740 * r172741;
double r172743 = r172739 / r172742;
double r172744 = g;
double r172745 = -r172744;
double r172746 = r172744 * r172744;
double r172747 = h;
double r172748 = r172747 * r172747;
double r172749 = r172746 - r172748;
double r172750 = sqrt(r172749);
double r172751 = r172745 + r172750;
double r172752 = r172743 * r172751;
double r172753 = cbrt(r172752);
double r172754 = r172745 - r172750;
double r172755 = r172743 * r172754;
double r172756 = cbrt(r172755);
double r172757 = r172753 + r172756;
return r172757;
}
double f(double g, double h, double a) {
double r172758 = g;
double r172759 = -8.762222041795177e-159;
bool r172760 = r172758 <= r172759;
double r172761 = 1.0;
double r172762 = 2.0;
double r172763 = a;
double r172764 = r172762 * r172763;
double r172765 = r172761 / r172764;
double r172766 = cbrt(r172765);
double r172767 = r172758 * r172758;
double r172768 = h;
double r172769 = r172768 * r172768;
double r172770 = r172767 - r172769;
double r172771 = sqrt(r172770);
double r172772 = r172771 - r172758;
double r172773 = cbrt(r172772);
double r172774 = r172766 * r172773;
double r172775 = -r172758;
double r172776 = r172775 - r172771;
double r172777 = r172765 * r172776;
double r172778 = cbrt(r172777);
double r172779 = cbrt(r172778);
double r172780 = r172779 * r172779;
double r172781 = r172780 * r172779;
double r172782 = r172774 + r172781;
double r172783 = r172765 * r172772;
double r172784 = cbrt(r172783);
double r172785 = r172775 - r172758;
double r172786 = r172761 * r172785;
double r172787 = cbrt(r172786);
double r172788 = cbrt(r172764);
double r172789 = r172787 / r172788;
double r172790 = r172784 + r172789;
double r172791 = r172760 ? r172782 : r172790;
return r172791;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.762222041795177e-159Initial program 34.3
Simplified34.3
rmApplied cbrt-prod30.5
rmApplied add-cube-cbrt30.5
if -8.762222041795177e-159 < g Initial program 36.4
Simplified36.4
rmApplied associate-*l/36.4
Applied cbrt-div32.6
Taylor expanded around inf 31.3
Final simplification30.9
herbie shell --seed 2019209 +o rules:numerics
(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))))))))