\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.421984391530689600469067551996753796002 \cdot 10^{-165}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{h \cdot h}{\frac{2 \cdot a}{1}}}}{\sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}} + \frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{2 \cdot a}}\\
\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 r137824 = 1.0;
double r137825 = 2.0;
double r137826 = a;
double r137827 = r137825 * r137826;
double r137828 = r137824 / r137827;
double r137829 = g;
double r137830 = -r137829;
double r137831 = r137829 * r137829;
double r137832 = h;
double r137833 = r137832 * r137832;
double r137834 = r137831 - r137833;
double r137835 = sqrt(r137834);
double r137836 = r137830 + r137835;
double r137837 = r137828 * r137836;
double r137838 = cbrt(r137837);
double r137839 = r137830 - r137835;
double r137840 = r137828 * r137839;
double r137841 = cbrt(r137840);
double r137842 = r137838 + r137841;
return r137842;
}
double f(double g, double h, double a) {
double r137843 = g;
double r137844 = -3.4219843915306896e-165;
bool r137845 = r137843 <= r137844;
double r137846 = h;
double r137847 = r137846 * r137846;
double r137848 = 2.0;
double r137849 = a;
double r137850 = r137848 * r137849;
double r137851 = 1.0;
double r137852 = r137850 / r137851;
double r137853 = r137847 / r137852;
double r137854 = cbrt(r137853);
double r137855 = r137843 * r137843;
double r137856 = r137855 - r137847;
double r137857 = sqrt(r137856);
double r137858 = r137857 - r137843;
double r137859 = cbrt(r137858);
double r137860 = r137854 / r137859;
double r137861 = r137851 * r137858;
double r137862 = cbrt(r137861);
double r137863 = cbrt(r137850);
double r137864 = r137862 / r137863;
double r137865 = r137860 + r137864;
double r137866 = r137851 / r137850;
double r137867 = -r137843;
double r137868 = r137867 + r137857;
double r137869 = r137866 * r137868;
double r137870 = cbrt(r137869);
double r137871 = cbrt(r137866);
double r137872 = r137867 - r137843;
double r137873 = cbrt(r137872);
double r137874 = r137871 * r137873;
double r137875 = r137870 + r137874;
double r137876 = r137845 ? r137865 : r137875;
return r137876;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.4219843915306896e-165Initial program 35.3
rmApplied associate-*l/35.3
Applied cbrt-div31.4
Simplified31.4
rmApplied flip--31.3
Applied associate-*r/31.4
Applied cbrt-div31.4
Simplified31.5
Simplified31.5
if -3.4219843915306896e-165 < g Initial program 36.9
rmApplied cbrt-prod33.0
Taylor expanded around inf 31.7
Final simplification31.6
herbie shell --seed 2019325
(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))))))))