\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 1.33522342398327 \cdot 10^{-206}:\\
\;\;\;\;\sqrt[3]{\left(g + \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{\frac{-1}{2}}{a}} + \sqrt[3]{\frac{\left(-g\right) - g}{2}} \cdot \sqrt[3]{\frac{1}{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a}} \cdot \sqrt[3]{\frac{g - g}{2}} + \sqrt[3]{g + \sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\frac{\frac{-1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r2408814 = 1.0;
double r2408815 = 2.0;
double r2408816 = a;
double r2408817 = r2408815 * r2408816;
double r2408818 = r2408814 / r2408817;
double r2408819 = g;
double r2408820 = -r2408819;
double r2408821 = r2408819 * r2408819;
double r2408822 = h;
double r2408823 = r2408822 * r2408822;
double r2408824 = r2408821 - r2408823;
double r2408825 = sqrt(r2408824);
double r2408826 = r2408820 + r2408825;
double r2408827 = r2408818 * r2408826;
double r2408828 = cbrt(r2408827);
double r2408829 = r2408820 - r2408825;
double r2408830 = r2408818 * r2408829;
double r2408831 = cbrt(r2408830);
double r2408832 = r2408828 + r2408831;
return r2408832;
}
double f(double g, double h, double a) {
double r2408833 = g;
double r2408834 = 1.33522342398327e-206;
bool r2408835 = r2408833 <= r2408834;
double r2408836 = r2408833 * r2408833;
double r2408837 = h;
double r2408838 = r2408837 * r2408837;
double r2408839 = r2408836 - r2408838;
double r2408840 = sqrt(r2408839);
double r2408841 = r2408833 + r2408840;
double r2408842 = -0.5;
double r2408843 = a;
double r2408844 = r2408842 / r2408843;
double r2408845 = r2408841 * r2408844;
double r2408846 = cbrt(r2408845);
double r2408847 = -r2408833;
double r2408848 = r2408847 - r2408833;
double r2408849 = 2.0;
double r2408850 = r2408848 / r2408849;
double r2408851 = cbrt(r2408850);
double r2408852 = 1.0;
double r2408853 = r2408852 / r2408843;
double r2408854 = cbrt(r2408853);
double r2408855 = r2408851 * r2408854;
double r2408856 = r2408846 + r2408855;
double r2408857 = r2408833 - r2408833;
double r2408858 = r2408857 / r2408849;
double r2408859 = cbrt(r2408858);
double r2408860 = r2408854 * r2408859;
double r2408861 = cbrt(r2408841);
double r2408862 = cbrt(r2408844);
double r2408863 = r2408861 * r2408862;
double r2408864 = r2408860 + r2408863;
double r2408865 = r2408835 ? r2408856 : r2408864;
return r2408865;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.33522342398327e-206Initial program 35.7
Simplified35.7
rmApplied *-un-lft-identity35.7
Applied *-un-lft-identity35.7
Applied distribute-lft-out--35.7
Applied times-frac35.7
Applied cbrt-prod32.1
Taylor expanded around -inf 31.5
Simplified31.5
if 1.33522342398327e-206 < g Initial program 34.7
Simplified34.6
rmApplied *-un-lft-identity34.6
Applied *-un-lft-identity34.6
Applied distribute-lft-out--34.6
Applied times-frac34.6
Applied cbrt-prod34.5
rmApplied cbrt-prod31.1
Taylor expanded around inf 31.0
Final simplification31.2
herbie shell --seed 2019128 +o rules:numerics
(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))))))))