\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 -3.035091110489776 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\sqrt{\left(g + h\right) \cdot \left(g - h\right)} - g} \cdot \sqrt[3]{\frac{\frac{1}{2}}{a}} + \sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(g + \sqrt{\left(g + h\right) \cdot \left(g - h\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(g + g\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}} + \sqrt[3]{\left(\sqrt{\left(g + h\right) \cdot \left(g - h\right)} - g\right) \cdot \frac{\frac{1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r7154794 = 1.0;
double r7154795 = 2.0;
double r7154796 = a;
double r7154797 = r7154795 * r7154796;
double r7154798 = r7154794 / r7154797;
double r7154799 = g;
double r7154800 = -r7154799;
double r7154801 = r7154799 * r7154799;
double r7154802 = h;
double r7154803 = r7154802 * r7154802;
double r7154804 = r7154801 - r7154803;
double r7154805 = sqrt(r7154804);
double r7154806 = r7154800 + r7154805;
double r7154807 = r7154798 * r7154806;
double r7154808 = cbrt(r7154807);
double r7154809 = r7154800 - r7154805;
double r7154810 = r7154798 * r7154809;
double r7154811 = cbrt(r7154810);
double r7154812 = r7154808 + r7154811;
return r7154812;
}
double f(double g, double h, double a) {
double r7154813 = g;
double r7154814 = -3.035091110489776e-158;
bool r7154815 = r7154813 <= r7154814;
double r7154816 = h;
double r7154817 = r7154813 + r7154816;
double r7154818 = r7154813 - r7154816;
double r7154819 = r7154817 * r7154818;
double r7154820 = sqrt(r7154819);
double r7154821 = r7154820 - r7154813;
double r7154822 = cbrt(r7154821);
double r7154823 = 0.5;
double r7154824 = a;
double r7154825 = r7154823 / r7154824;
double r7154826 = cbrt(r7154825);
double r7154827 = r7154822 * r7154826;
double r7154828 = -0.5;
double r7154829 = r7154828 / r7154824;
double r7154830 = r7154813 + r7154820;
double r7154831 = r7154829 * r7154830;
double r7154832 = cbrt(r7154831);
double r7154833 = r7154827 + r7154832;
double r7154834 = r7154813 + r7154813;
double r7154835 = r7154834 * r7154828;
double r7154836 = cbrt(r7154835);
double r7154837 = cbrt(r7154824);
double r7154838 = r7154836 / r7154837;
double r7154839 = r7154821 * r7154825;
double r7154840 = cbrt(r7154839);
double r7154841 = r7154838 + r7154840;
double r7154842 = r7154815 ? r7154833 : r7154841;
return r7154842;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.035091110489776e-158Initial program 33.7
Simplified33.7
rmApplied cbrt-prod29.8
if -3.035091110489776e-158 < g Initial program 36.8
Simplified36.8
rmApplied associate-*l/36.8
Applied cbrt-div33.2
Taylor expanded around inf 32.4
Final simplification31.2
herbie shell --seed 2019163
(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))))))))