\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.3907293248482188 \cdot 10^{-163}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right) \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\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 r168022 = 1.0;
double r168023 = 2.0;
double r168024 = a;
double r168025 = r168023 * r168024;
double r168026 = r168022 / r168025;
double r168027 = g;
double r168028 = -r168027;
double r168029 = r168027 * r168027;
double r168030 = h;
double r168031 = r168030 * r168030;
double r168032 = r168029 - r168031;
double r168033 = sqrt(r168032);
double r168034 = r168028 + r168033;
double r168035 = r168026 * r168034;
double r168036 = cbrt(r168035);
double r168037 = r168028 - r168033;
double r168038 = r168026 * r168037;
double r168039 = cbrt(r168038);
double r168040 = r168036 + r168039;
return r168040;
}
double f(double g, double h, double a) {
double r168041 = g;
double r168042 = -2.3907293248482188e-163;
bool r168043 = r168041 <= r168042;
double r168044 = 1.0;
double r168045 = -r168041;
double r168046 = r168041 * r168041;
double r168047 = h;
double r168048 = r168047 * r168047;
double r168049 = r168046 - r168048;
double r168050 = sqrt(r168049);
double r168051 = cbrt(r168050);
double r168052 = r168051 * r168051;
double r168053 = r168052 * r168051;
double r168054 = r168045 + r168053;
double r168055 = r168044 * r168054;
double r168056 = cbrt(r168055);
double r168057 = 2.0;
double r168058 = a;
double r168059 = r168057 * r168058;
double r168060 = cbrt(r168059);
double r168061 = r168056 / r168060;
double r168062 = r168044 / r168059;
double r168063 = r168045 - r168050;
double r168064 = r168062 * r168063;
double r168065 = cbrt(r168064);
double r168066 = r168061 + r168065;
double r168067 = r168045 + r168050;
double r168068 = r168062 * r168067;
double r168069 = cbrt(r168068);
double r168070 = r168045 - r168041;
double r168071 = r168044 * r168070;
double r168072 = cbrt(r168071);
double r168073 = r168072 / r168060;
double r168074 = r168069 + r168073;
double r168075 = r168043 ? r168066 : r168074;
return r168075;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.3907293248482188e-163Initial program 35.0
rmApplied associate-*l/35.0
Applied cbrt-div31.6
rmApplied add-cube-cbrt31.6
if -2.3907293248482188e-163 < g Initial program 36.3
rmApplied associate-*l/36.3
Applied cbrt-div33.2
Taylor expanded around inf 32.0
Final simplification31.8
herbie shell --seed 2020081 +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))))))))