\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.4401173585185467 \cdot 10^{-164}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\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}}} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{\mathsf{fma}\left(g, g, -h \cdot h\right)}\right)}}{\sqrt[3]{2 \cdot a}}\\
\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 r167375 = 1.0;
double r167376 = 2.0;
double r167377 = a;
double r167378 = r167376 * r167377;
double r167379 = r167375 / r167378;
double r167380 = g;
double r167381 = -r167380;
double r167382 = r167380 * r167380;
double r167383 = h;
double r167384 = r167383 * r167383;
double r167385 = r167382 - r167384;
double r167386 = sqrt(r167385);
double r167387 = r167381 + r167386;
double r167388 = r167379 * r167387;
double r167389 = cbrt(r167388);
double r167390 = r167381 - r167386;
double r167391 = r167379 * r167390;
double r167392 = cbrt(r167391);
double r167393 = r167389 + r167392;
return r167393;
}
double f(double g, double h, double a) {
double r167394 = g;
double r167395 = -1.4401173585185467e-164;
bool r167396 = r167394 <= r167395;
double r167397 = 1.0;
double r167398 = 2.0;
double r167399 = a;
double r167400 = r167398 * r167399;
double r167401 = r167397 / r167400;
double r167402 = cbrt(r167401);
double r167403 = -r167394;
double r167404 = r167394 * r167394;
double r167405 = h;
double r167406 = r167405 * r167405;
double r167407 = r167404 - r167406;
double r167408 = sqrt(r167407);
double r167409 = cbrt(r167408);
double r167410 = r167409 * r167409;
double r167411 = r167410 * r167409;
double r167412 = r167403 + r167411;
double r167413 = cbrt(r167412);
double r167414 = r167402 * r167413;
double r167415 = -r167406;
double r167416 = fma(r167394, r167394, r167415);
double r167417 = sqrt(r167416);
double r167418 = r167403 - r167417;
double r167419 = r167397 * r167418;
double r167420 = cbrt(r167419);
double r167421 = cbrt(r167400);
double r167422 = r167420 / r167421;
double r167423 = r167414 + r167422;
double r167424 = r167403 + r167408;
double r167425 = r167401 * r167424;
double r167426 = cbrt(r167425);
double r167427 = r167403 - r167394;
double r167428 = r167397 * r167427;
double r167429 = cbrt(r167428);
double r167430 = r167429 / r167421;
double r167431 = r167426 + r167430;
double r167432 = r167396 ? r167423 : r167431;
return r167432;
}



Bits error versus g



Bits error versus h



Bits error versus a
if g < -1.4401173585185467e-164Initial program 34.9
rmApplied associate-*l/34.9
Applied cbrt-div34.9
rmApplied cbrt-prod31.1
rmApplied fma-neg31.1
rmApplied add-cube-cbrt31.1
if -1.4401173585185467e-164 < g Initial program 36.3
rmApplied associate-*l/36.3
Applied cbrt-div32.4
Taylor expanded around inf 31.1
Final simplification31.1
herbie shell --seed 2020034 +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))))))))