\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 -8.483083017653631513010138080609923608314 \cdot 10^{-164}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\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)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r127120 = 1.0;
double r127121 = 2.0;
double r127122 = a;
double r127123 = r127121 * r127122;
double r127124 = r127120 / r127123;
double r127125 = g;
double r127126 = -r127125;
double r127127 = r127125 * r127125;
double r127128 = h;
double r127129 = r127128 * r127128;
double r127130 = r127127 - r127129;
double r127131 = sqrt(r127130);
double r127132 = r127126 + r127131;
double r127133 = r127124 * r127132;
double r127134 = cbrt(r127133);
double r127135 = r127126 - r127131;
double r127136 = r127124 * r127135;
double r127137 = cbrt(r127136);
double r127138 = r127134 + r127137;
return r127138;
}
double f(double g, double h, double a) {
double r127139 = g;
double r127140 = -8.483083017653632e-164;
bool r127141 = r127139 <= r127140;
double r127142 = 1.0;
double r127143 = r127139 * r127139;
double r127144 = h;
double r127145 = r127144 * r127144;
double r127146 = r127143 - r127145;
double r127147 = sqrt(r127146);
double r127148 = r127147 - r127139;
double r127149 = r127142 * r127148;
double r127150 = cbrt(r127149);
double r127151 = 2.0;
double r127152 = a;
double r127153 = r127151 * r127152;
double r127154 = cbrt(r127153);
double r127155 = r127150 / r127154;
double r127156 = r127142 / r127153;
double r127157 = -r127139;
double r127158 = r127157 - r127147;
double r127159 = r127156 * r127158;
double r127160 = cbrt(r127159);
double r127161 = r127155 + r127160;
double r127162 = r127157 + r127147;
double r127163 = r127156 * r127162;
double r127164 = cbrt(r127163);
double r127165 = cbrt(r127156);
double r127166 = r127157 - r127139;
double r127167 = cbrt(r127166);
double r127168 = r127165 * r127167;
double r127169 = r127164 + r127168;
double r127170 = r127141 ? r127161 : r127169;
return r127170;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.483083017653632e-164Initial program 35.1
rmApplied associate-*l/35.1
Applied cbrt-div31.1
Simplified31.1
if -8.483083017653632e-164 < g Initial program 37.0
rmApplied cbrt-prod33.3
Taylor expanded around inf 32.2
Final simplification31.7
herbie shell --seed 2019208 +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))))))))