\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.774064873579751427032820598607606646875 \cdot 10^{-177}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\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)}} + \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 r146831 = 1.0;
double r146832 = 2.0;
double r146833 = a;
double r146834 = r146832 * r146833;
double r146835 = r146831 / r146834;
double r146836 = g;
double r146837 = -r146836;
double r146838 = r146836 * r146836;
double r146839 = h;
double r146840 = r146839 * r146839;
double r146841 = r146838 - r146840;
double r146842 = sqrt(r146841);
double r146843 = r146837 + r146842;
double r146844 = r146835 * r146843;
double r146845 = cbrt(r146844);
double r146846 = r146837 - r146842;
double r146847 = r146835 * r146846;
double r146848 = cbrt(r146847);
double r146849 = r146845 + r146848;
return r146849;
}
double f(double g, double h, double a) {
double r146850 = g;
double r146851 = -2.7740648735797514e-177;
bool r146852 = r146850 <= r146851;
double r146853 = 1.0;
double r146854 = -r146850;
double r146855 = r146850 * r146850;
double r146856 = h;
double r146857 = r146856 * r146856;
double r146858 = r146855 - r146857;
double r146859 = sqrt(r146858);
double r146860 = r146854 + r146859;
double r146861 = r146853 * r146860;
double r146862 = cbrt(r146861);
double r146863 = 2.0;
double r146864 = a;
double r146865 = r146863 * r146864;
double r146866 = cbrt(r146865);
double r146867 = r146862 / r146866;
double r146868 = r146853 / r146865;
double r146869 = r146854 - r146859;
double r146870 = r146868 * r146869;
double r146871 = cbrt(r146870);
double r146872 = r146867 + r146871;
double r146873 = r146868 * r146860;
double r146874 = cbrt(r146873);
double r146875 = cbrt(r146874);
double r146876 = r146875 * r146875;
double r146877 = r146876 * r146875;
double r146878 = r146854 - r146850;
double r146879 = r146853 * r146878;
double r146880 = cbrt(r146879);
double r146881 = r146880 / r146866;
double r146882 = r146877 + r146881;
double r146883 = r146852 ? r146872 : r146882;
return r146883;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.7740648735797514e-177Initial program 34.4
rmApplied associate-*l/34.4
Applied cbrt-div30.9
if -2.7740648735797514e-177 < g Initial program 36.5
rmApplied associate-*l/36.5
Applied cbrt-div32.8
rmApplied add-cube-cbrt32.8
Taylor expanded around inf 31.7
Final simplification31.3
herbie shell --seed 2019297
(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))))))))