\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.321285034107555607621474765303676741173 \cdot 10^{-166}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + -1 \cdot 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)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r113223 = 1.0;
double r113224 = 2.0;
double r113225 = a;
double r113226 = r113224 * r113225;
double r113227 = r113223 / r113226;
double r113228 = g;
double r113229 = -r113228;
double r113230 = r113228 * r113228;
double r113231 = h;
double r113232 = r113231 * r113231;
double r113233 = r113230 - r113232;
double r113234 = sqrt(r113233);
double r113235 = r113229 + r113234;
double r113236 = r113227 * r113235;
double r113237 = cbrt(r113236);
double r113238 = r113229 - r113234;
double r113239 = r113227 * r113238;
double r113240 = cbrt(r113239);
double r113241 = r113237 + r113240;
return r113241;
}
double f(double g, double h, double a) {
double r113242 = g;
double r113243 = 2.3212850341075556e-166;
bool r113244 = r113242 <= r113243;
double r113245 = 1.0;
double r113246 = -r113242;
double r113247 = -1.0;
double r113248 = r113247 * r113242;
double r113249 = r113246 + r113248;
double r113250 = r113245 * r113249;
double r113251 = cbrt(r113250);
double r113252 = 2.0;
double r113253 = a;
double r113254 = r113252 * r113253;
double r113255 = cbrt(r113254);
double r113256 = r113251 / r113255;
double r113257 = r113245 / r113254;
double r113258 = r113242 * r113242;
double r113259 = h;
double r113260 = r113259 * r113259;
double r113261 = r113258 - r113260;
double r113262 = sqrt(r113261);
double r113263 = r113246 - r113262;
double r113264 = r113257 * r113263;
double r113265 = cbrt(r113264);
double r113266 = r113256 + r113265;
double r113267 = r113246 + r113262;
double r113268 = r113257 * r113267;
double r113269 = cbrt(r113268);
double r113270 = r113245 * r113263;
double r113271 = cbrt(r113270);
double r113272 = r113271 / r113255;
double r113273 = r113269 + r113272;
double r113274 = r113244 ? r113266 : r113273;
return r113274;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.3212850341075556e-166Initial program 36.6
rmApplied associate-*l/36.6
Applied cbrt-div33.3
Taylor expanded around -inf 32.4
if 2.3212850341075556e-166 < g Initial program 34.5
rmApplied associate-*l/34.5
Applied cbrt-div30.7
Final simplification31.6
herbie shell --seed 2019294
(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))))))))