\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 -5.1390220092975651 \cdot 10^{-161}:\\
\;\;\;\;\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]{\frac{0 + h \cdot h}{\sqrt{g \cdot g - h \cdot h} - g}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - g\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r153990 = 1.0;
double r153991 = 2.0;
double r153992 = a;
double r153993 = r153991 * r153992;
double r153994 = r153990 / r153993;
double r153995 = g;
double r153996 = -r153995;
double r153997 = r153995 * r153995;
double r153998 = h;
double r153999 = r153998 * r153998;
double r154000 = r153997 - r153999;
double r154001 = sqrt(r154000);
double r154002 = r153996 + r154001;
double r154003 = r153994 * r154002;
double r154004 = cbrt(r154003);
double r154005 = r153996 - r154001;
double r154006 = r153994 * r154005;
double r154007 = cbrt(r154006);
double r154008 = r154004 + r154007;
return r154008;
}
double f(double g, double h, double a) {
double r154009 = g;
double r154010 = -5.139022009297565e-161;
bool r154011 = r154009 <= r154010;
double r154012 = 1.0;
double r154013 = 2.0;
double r154014 = a;
double r154015 = r154013 * r154014;
double r154016 = r154012 / r154015;
double r154017 = -r154009;
double r154018 = r154009 * r154009;
double r154019 = h;
double r154020 = r154019 * r154019;
double r154021 = r154018 - r154020;
double r154022 = sqrt(r154021);
double r154023 = r154017 + r154022;
double r154024 = r154016 * r154023;
double r154025 = cbrt(r154024);
double r154026 = cbrt(r154016);
double r154027 = 0.0;
double r154028 = r154027 + r154020;
double r154029 = r154022 - r154009;
double r154030 = r154028 / r154029;
double r154031 = cbrt(r154030);
double r154032 = r154026 * r154031;
double r154033 = r154025 + r154032;
double r154034 = r154017 - r154009;
double r154035 = r154012 * r154034;
double r154036 = cbrt(r154035);
double r154037 = cbrt(r154015);
double r154038 = r154036 / r154037;
double r154039 = r154025 + r154038;
double r154040 = r154011 ? r154033 : r154039;
return r154040;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -5.139022009297565e-161Initial program 34.3
rmApplied cbrt-prod34.3
rmApplied flip--34.3
Simplified33.7
Simplified33.7
if -5.139022009297565e-161 < g Initial program 36.8
rmApplied associate-*l/36.8
Applied cbrt-div33.2
Taylor expanded around inf 32.0
Final simplification32.8
herbie shell --seed 2020065
(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))))))))