\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.4448816157766584 \cdot 10^{-161}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + g\right) \cdot \frac{\frac{-1}{2}}{a}} + \sqrt[3]{\frac{\frac{1}{2}}{a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{-1}{2}}{a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + g} + \sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r2945931 = 1.0;
double r2945932 = 2.0;
double r2945933 = a;
double r2945934 = r2945932 * r2945933;
double r2945935 = r2945931 / r2945934;
double r2945936 = g;
double r2945937 = -r2945936;
double r2945938 = r2945936 * r2945936;
double r2945939 = h;
double r2945940 = r2945939 * r2945939;
double r2945941 = r2945938 - r2945940;
double r2945942 = sqrt(r2945941);
double r2945943 = r2945937 + r2945942;
double r2945944 = r2945935 * r2945943;
double r2945945 = cbrt(r2945944);
double r2945946 = r2945937 - r2945942;
double r2945947 = r2945935 * r2945946;
double r2945948 = cbrt(r2945947);
double r2945949 = r2945945 + r2945948;
return r2945949;
}
double f(double g, double h, double a) {
double r2945950 = g;
double r2945951 = 2.4448816157766584e-161;
bool r2945952 = r2945950 <= r2945951;
double r2945953 = r2945950 * r2945950;
double r2945954 = h;
double r2945955 = r2945954 * r2945954;
double r2945956 = r2945953 - r2945955;
double r2945957 = sqrt(r2945956);
double r2945958 = r2945957 + r2945950;
double r2945959 = -0.5;
double r2945960 = a;
double r2945961 = r2945959 / r2945960;
double r2945962 = r2945958 * r2945961;
double r2945963 = cbrt(r2945962);
double r2945964 = 0.5;
double r2945965 = r2945964 / r2945960;
double r2945966 = cbrt(r2945965);
double r2945967 = -r2945950;
double r2945968 = r2945967 - r2945950;
double r2945969 = cbrt(r2945968);
double r2945970 = r2945966 * r2945969;
double r2945971 = r2945963 + r2945970;
double r2945972 = cbrt(r2945961);
double r2945973 = cbrt(r2945958);
double r2945974 = r2945972 * r2945973;
double r2945975 = r2945957 - r2945950;
double r2945976 = 2.0;
double r2945977 = r2945976 * r2945960;
double r2945978 = r2945975 / r2945977;
double r2945979 = cbrt(r2945978);
double r2945980 = r2945974 + r2945979;
double r2945981 = r2945952 ? r2945971 : r2945980;
return r2945981;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.4448816157766584e-161Initial program 36.2
Simplified36.2
rmApplied div-inv36.2
Applied cbrt-prod32.8
Simplified32.7
Taylor expanded around -inf 31.7
Simplified31.7
if 2.4448816157766584e-161 < g Initial program 33.8
Simplified33.8
rmApplied cbrt-prod30.2
Final simplification31.0
herbie shell --seed 2019155
(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))))))))