\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.776832660171497124288324412416908546106 \cdot 10^{-160}:\\
\;\;\;\;\sqrt[3]{\frac{1 \cdot \left(\left(-g\right) - g\right)}{2}} \cdot \sqrt[3]{\frac{1}{a}} + \sqrt[3]{\frac{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}{a} \cdot \frac{1}{2}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\left(\sqrt{g \cdot g - h \cdot h} - g\right) \cdot \frac{1}{2}}{a}} + \frac{\sqrt[3]{\frac{\left(\left(-g\right) - \sqrt{\left(g - h\right) \cdot \left(h + g\right)}\right) \cdot 1}{2}}}{\sqrt[3]{a}}\\
\end{array}double f(double g, double h, double a) {
double r97287 = 1.0;
double r97288 = 2.0;
double r97289 = a;
double r97290 = r97288 * r97289;
double r97291 = r97287 / r97290;
double r97292 = g;
double r97293 = -r97292;
double r97294 = r97292 * r97292;
double r97295 = h;
double r97296 = r97295 * r97295;
double r97297 = r97294 - r97296;
double r97298 = sqrt(r97297);
double r97299 = r97293 + r97298;
double r97300 = r97291 * r97299;
double r97301 = cbrt(r97300);
double r97302 = r97293 - r97298;
double r97303 = r97291 * r97302;
double r97304 = cbrt(r97303);
double r97305 = r97301 + r97304;
return r97305;
}
double f(double g, double h, double a) {
double r97306 = g;
double r97307 = 2.776832660171497e-160;
bool r97308 = r97306 <= r97307;
double r97309 = 1.0;
double r97310 = -r97306;
double r97311 = r97310 - r97306;
double r97312 = r97309 * r97311;
double r97313 = 2.0;
double r97314 = r97312 / r97313;
double r97315 = cbrt(r97314);
double r97316 = 1.0;
double r97317 = a;
double r97318 = r97316 / r97317;
double r97319 = cbrt(r97318);
double r97320 = r97315 * r97319;
double r97321 = r97306 * r97306;
double r97322 = h;
double r97323 = r97322 * r97322;
double r97324 = r97321 - r97323;
double r97325 = sqrt(r97324);
double r97326 = r97310 - r97325;
double r97327 = r97326 / r97317;
double r97328 = r97309 / r97313;
double r97329 = r97327 * r97328;
double r97330 = cbrt(r97329);
double r97331 = r97320 + r97330;
double r97332 = r97325 - r97306;
double r97333 = r97332 * r97328;
double r97334 = r97333 / r97317;
double r97335 = cbrt(r97334);
double r97336 = r97306 - r97322;
double r97337 = r97322 + r97306;
double r97338 = r97336 * r97337;
double r97339 = sqrt(r97338);
double r97340 = r97310 - r97339;
double r97341 = r97340 * r97309;
double r97342 = r97341 / r97313;
double r97343 = cbrt(r97342);
double r97344 = cbrt(r97317);
double r97345 = r97343 / r97344;
double r97346 = r97335 + r97345;
double r97347 = r97308 ? r97331 : r97346;
return r97347;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.776832660171497e-160Initial program 36.7
Simplified36.7
rmApplied div-inv36.7
Applied cbrt-prod32.9
Simplified32.9
Taylor expanded around -inf 31.9
Simplified31.9
if 2.776832660171497e-160 < g Initial program 35.5
Simplified35.6
rmApplied associate-*r/35.5
Applied cbrt-div31.6
Simplified31.6
Final simplification31.7
herbie shell --seed 2019195 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))