\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 -1.561626692058613 \cdot 10^{-162}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{2}} \cdot \sqrt[3]{\frac{1}{a}} + \frac{\sqrt[3]{\frac{h \cdot h}{\frac{a}{\frac{-1}{2}}}}}{\sqrt[3]{g - \sqrt{g \cdot g - h \cdot h}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{g - g}{2}} \cdot \sqrt[3]{\frac{1}{a}} + \sqrt[3]{g + \sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\frac{\frac{-1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r26020364 = 1.0;
double r26020365 = 2.0;
double r26020366 = a;
double r26020367 = r26020365 * r26020366;
double r26020368 = r26020364 / r26020367;
double r26020369 = g;
double r26020370 = -r26020369;
double r26020371 = r26020369 * r26020369;
double r26020372 = h;
double r26020373 = r26020372 * r26020372;
double r26020374 = r26020371 - r26020373;
double r26020375 = sqrt(r26020374);
double r26020376 = r26020370 + r26020375;
double r26020377 = r26020368 * r26020376;
double r26020378 = cbrt(r26020377);
double r26020379 = r26020370 - r26020375;
double r26020380 = r26020368 * r26020379;
double r26020381 = cbrt(r26020380);
double r26020382 = r26020378 + r26020381;
return r26020382;
}
double f(double g, double h, double a) {
double r26020383 = g;
double r26020384 = -1.561626692058613e-162;
bool r26020385 = r26020383 <= r26020384;
double r26020386 = r26020383 * r26020383;
double r26020387 = h;
double r26020388 = r26020387 * r26020387;
double r26020389 = r26020386 - r26020388;
double r26020390 = sqrt(r26020389);
double r26020391 = r26020390 - r26020383;
double r26020392 = 2.0;
double r26020393 = r26020391 / r26020392;
double r26020394 = cbrt(r26020393);
double r26020395 = 1.0;
double r26020396 = a;
double r26020397 = r26020395 / r26020396;
double r26020398 = cbrt(r26020397);
double r26020399 = r26020394 * r26020398;
double r26020400 = -0.5;
double r26020401 = r26020396 / r26020400;
double r26020402 = r26020388 / r26020401;
double r26020403 = cbrt(r26020402);
double r26020404 = r26020383 - r26020390;
double r26020405 = cbrt(r26020404);
double r26020406 = r26020403 / r26020405;
double r26020407 = r26020399 + r26020406;
double r26020408 = r26020383 - r26020383;
double r26020409 = r26020408 / r26020392;
double r26020410 = cbrt(r26020409);
double r26020411 = r26020410 * r26020398;
double r26020412 = r26020383 + r26020390;
double r26020413 = cbrt(r26020412);
double r26020414 = r26020400 / r26020396;
double r26020415 = cbrt(r26020414);
double r26020416 = r26020413 * r26020415;
double r26020417 = r26020411 + r26020416;
double r26020418 = r26020385 ? r26020407 : r26020417;
return r26020418;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.561626692058613e-162Initial program 33.9
Simplified34.0
rmApplied *-un-lft-identity34.0
Applied *-un-lft-identity34.0
Applied distribute-lft-out--34.0
Applied times-frac33.9
Applied cbrt-prod30.3
rmApplied flip-+30.2
Applied associate-*r/30.3
Applied cbrt-div30.3
Simplified30.0
if -1.561626692058613e-162 < g Initial program 36.3
Simplified36.3
rmApplied *-un-lft-identity36.3
Applied *-un-lft-identity36.3
Applied distribute-lft-out--36.3
Applied times-frac36.3
Applied cbrt-prod35.9
rmApplied cbrt-prod32.8
Taylor expanded around inf 32.6
Final simplification31.4
herbie shell --seed 2019128 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))