\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.359356862874829159472492534077743049279 \cdot 10^{-185}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\sqrt{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt{\sqrt{g \cdot g - h \cdot h}} - g\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\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 r120815 = 1.0;
double r120816 = 2.0;
double r120817 = a;
double r120818 = r120816 * r120817;
double r120819 = r120815 / r120818;
double r120820 = g;
double r120821 = -r120820;
double r120822 = r120820 * r120820;
double r120823 = h;
double r120824 = r120823 * r120823;
double r120825 = r120822 - r120824;
double r120826 = sqrt(r120825);
double r120827 = r120821 + r120826;
double r120828 = r120819 * r120827;
double r120829 = cbrt(r120828);
double r120830 = r120821 - r120826;
double r120831 = r120819 * r120830;
double r120832 = cbrt(r120831);
double r120833 = r120829 + r120832;
return r120833;
}
double f(double g, double h, double a) {
double r120834 = g;
double r120835 = -8.359356862874829e-185;
bool r120836 = r120834 <= r120835;
double r120837 = 1.0;
double r120838 = r120834 * r120834;
double r120839 = h;
double r120840 = r120839 * r120839;
double r120841 = r120838 - r120840;
double r120842 = sqrt(r120841);
double r120843 = sqrt(r120842);
double r120844 = r120843 * r120843;
double r120845 = r120844 - r120834;
double r120846 = r120837 * r120845;
double r120847 = cbrt(r120846);
double r120848 = 2.0;
double r120849 = a;
double r120850 = r120848 * r120849;
double r120851 = cbrt(r120850);
double r120852 = r120847 / r120851;
double r120853 = r120837 / r120850;
double r120854 = cbrt(r120853);
double r120855 = -r120834;
double r120856 = r120855 - r120842;
double r120857 = cbrt(r120856);
double r120858 = r120854 * r120857;
double r120859 = r120852 + r120858;
double r120860 = r120855 + r120842;
double r120861 = r120853 * r120860;
double r120862 = cbrt(r120861);
double r120863 = r120855 - r120834;
double r120864 = cbrt(r120863);
double r120865 = r120854 * r120864;
double r120866 = r120862 + r120865;
double r120867 = r120836 ? r120859 : r120866;
return r120867;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.359356862874829e-185Initial program 35.3
rmApplied cbrt-prod35.2
rmApplied associate-*l/35.2
Applied cbrt-div31.3
Simplified31.3
rmApplied add-sqr-sqrt31.3
Applied sqrt-prod31.3
if -8.359356862874829e-185 < g Initial program 36.8
rmApplied cbrt-prod33.4
Taylor expanded around inf 32.5
Final simplification31.9
herbie shell --seed 2019326 +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))))))))