\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 3.0797478610904441 \cdot 10^{-234}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) \cdot \left(-g\right) - \sqrt{g \cdot g - h \cdot h} \cdot \sqrt{g \cdot g - h \cdot h}\right)}}{\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)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{g + h} \cdot \sqrt{g - h}\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r176004 = 1.0;
double r176005 = 2.0;
double r176006 = a;
double r176007 = r176005 * r176006;
double r176008 = r176004 / r176007;
double r176009 = g;
double r176010 = -r176009;
double r176011 = r176009 * r176009;
double r176012 = h;
double r176013 = r176012 * r176012;
double r176014 = r176011 - r176013;
double r176015 = sqrt(r176014);
double r176016 = r176010 + r176015;
double r176017 = r176008 * r176016;
double r176018 = cbrt(r176017);
double r176019 = r176010 - r176015;
double r176020 = r176008 * r176019;
double r176021 = cbrt(r176020);
double r176022 = r176018 + r176021;
return r176022;
}
double f(double g, double h, double a) {
double r176023 = g;
double r176024 = 3.079747861090444e-234;
bool r176025 = r176023 <= r176024;
double r176026 = 1.0;
double r176027 = -r176023;
double r176028 = r176023 * r176023;
double r176029 = h;
double r176030 = r176029 * r176029;
double r176031 = r176028 - r176030;
double r176032 = sqrt(r176031);
double r176033 = r176027 + r176032;
double r176034 = r176026 * r176033;
double r176035 = cbrt(r176034);
double r176036 = 2.0;
double r176037 = a;
double r176038 = r176036 * r176037;
double r176039 = cbrt(r176038);
double r176040 = r176035 / r176039;
double r176041 = r176026 / r176038;
double r176042 = r176027 * r176027;
double r176043 = r176032 * r176032;
double r176044 = r176042 - r176043;
double r176045 = r176041 * r176044;
double r176046 = cbrt(r176045);
double r176047 = cbrt(r176033);
double r176048 = r176046 / r176047;
double r176049 = r176040 + r176048;
double r176050 = r176041 * r176033;
double r176051 = cbrt(r176050);
double r176052 = r176023 + r176029;
double r176053 = sqrt(r176052);
double r176054 = r176023 - r176029;
double r176055 = sqrt(r176054);
double r176056 = r176053 * r176055;
double r176057 = r176027 - r176056;
double r176058 = r176026 * r176057;
double r176059 = cbrt(r176058);
double r176060 = r176059 / r176039;
double r176061 = r176051 + r176060;
double r176062 = r176025 ? r176049 : r176061;
return r176062;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 3.079747861090444e-234Initial program 35.9
rmApplied associate-*l/35.9
Applied cbrt-div32.3
rmApplied flip--32.1
Applied associate-*r/32.2
Applied cbrt-div32.2
if 3.079747861090444e-234 < g Initial program 34.9
rmApplied associate-*l/34.9
Applied cbrt-div31.4
rmApplied difference-of-squares31.4
Applied sqrt-prod30.8
Final simplification31.5
herbie shell --seed 2020049 +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))))))))