\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.079954365560622 \cdot 10^{-159}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + g\right) \cdot \frac{\frac{-1}{2}}{a}} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{-1}{2}}{a}} \cdot \sqrt[3]{\left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}} + g} + \frac{\sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}}{\sqrt[3]{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r2320874 = 1.0;
double r2320875 = 2.0;
double r2320876 = a;
double r2320877 = r2320875 * r2320876;
double r2320878 = r2320874 / r2320877;
double r2320879 = g;
double r2320880 = -r2320879;
double r2320881 = r2320879 * r2320879;
double r2320882 = h;
double r2320883 = r2320882 * r2320882;
double r2320884 = r2320881 - r2320883;
double r2320885 = sqrt(r2320884);
double r2320886 = r2320880 + r2320885;
double r2320887 = r2320878 * r2320886;
double r2320888 = cbrt(r2320887);
double r2320889 = r2320880 - r2320885;
double r2320890 = r2320878 * r2320889;
double r2320891 = cbrt(r2320890);
double r2320892 = r2320888 + r2320891;
return r2320892;
}
double f(double g, double h, double a) {
double r2320893 = g;
double r2320894 = 1.079954365560622e-159;
bool r2320895 = r2320893 <= r2320894;
double r2320896 = r2320893 * r2320893;
double r2320897 = h;
double r2320898 = r2320897 * r2320897;
double r2320899 = r2320896 - r2320898;
double r2320900 = sqrt(r2320899);
double r2320901 = r2320900 + r2320893;
double r2320902 = -0.5;
double r2320903 = a;
double r2320904 = r2320902 / r2320903;
double r2320905 = r2320901 * r2320904;
double r2320906 = cbrt(r2320905);
double r2320907 = -r2320893;
double r2320908 = r2320907 - r2320893;
double r2320909 = cbrt(r2320908);
double r2320910 = 2.0;
double r2320911 = r2320903 * r2320910;
double r2320912 = cbrt(r2320911);
double r2320913 = r2320909 / r2320912;
double r2320914 = r2320906 + r2320913;
double r2320915 = cbrt(r2320904);
double r2320916 = cbrt(r2320899);
double r2320917 = fabs(r2320916);
double r2320918 = sqrt(r2320916);
double r2320919 = r2320917 * r2320918;
double r2320920 = r2320919 + r2320893;
double r2320921 = cbrt(r2320920);
double r2320922 = r2320915 * r2320921;
double r2320923 = r2320900 - r2320893;
double r2320924 = cbrt(r2320923);
double r2320925 = r2320924 / r2320912;
double r2320926 = r2320922 + r2320925;
double r2320927 = r2320895 ? r2320914 : r2320926;
return r2320927;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.079954365560622e-159Initial program 36.8
Simplified36.8
rmApplied cbrt-div33.2
Taylor expanded around -inf 32.2
Simplified32.2
if 1.079954365560622e-159 < g Initial program 34.1
Simplified34.0
rmApplied cbrt-div34.0
rmApplied cbrt-prod30.5
rmApplied add-cube-cbrt30.5
Applied sqrt-prod30.5
Simplified30.5
Final simplification31.4
herbie shell --seed 2019154
(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))))))))