\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 3.2243130481662061 \cdot 10^{-161}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + -1 \cdot g} + \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 \sqrt[3]{\frac{\left({g}^{2} - {g}^{2}\right) + {h}^{2}}{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{\left(g + h\right) \cdot \left(g - h\right)}}\\
\end{array}double f(double g, double h, double a) {
double r142342 = 1.0;
double r142343 = 2.0;
double r142344 = a;
double r142345 = r142343 * r142344;
double r142346 = r142342 / r142345;
double r142347 = g;
double r142348 = -r142347;
double r142349 = r142347 * r142347;
double r142350 = h;
double r142351 = r142350 * r142350;
double r142352 = r142349 - r142351;
double r142353 = sqrt(r142352);
double r142354 = r142348 + r142353;
double r142355 = r142346 * r142354;
double r142356 = cbrt(r142355);
double r142357 = r142348 - r142353;
double r142358 = r142346 * r142357;
double r142359 = cbrt(r142358);
double r142360 = r142356 + r142359;
return r142360;
}
double f(double g, double h, double a) {
double r142361 = g;
double r142362 = 3.224313048166206e-161;
bool r142363 = r142361 <= r142362;
double r142364 = 1.0;
double r142365 = 2.0;
double r142366 = a;
double r142367 = r142365 * r142366;
double r142368 = r142364 / r142367;
double r142369 = cbrt(r142368);
double r142370 = -r142361;
double r142371 = -1.0;
double r142372 = r142371 * r142361;
double r142373 = r142370 + r142372;
double r142374 = cbrt(r142373);
double r142375 = r142369 * r142374;
double r142376 = r142361 * r142361;
double r142377 = h;
double r142378 = r142377 * r142377;
double r142379 = r142376 - r142378;
double r142380 = sqrt(r142379);
double r142381 = r142370 - r142380;
double r142382 = r142368 * r142381;
double r142383 = cbrt(r142382);
double r142384 = r142375 + r142383;
double r142385 = 2.0;
double r142386 = pow(r142361, r142385);
double r142387 = r142386 - r142386;
double r142388 = pow(r142377, r142385);
double r142389 = r142387 + r142388;
double r142390 = r142389 / r142381;
double r142391 = cbrt(r142390);
double r142392 = r142369 * r142391;
double r142393 = r142361 + r142377;
double r142394 = r142361 - r142377;
double r142395 = r142393 * r142394;
double r142396 = sqrt(r142395);
double r142397 = r142370 - r142396;
double r142398 = cbrt(r142397);
double r142399 = r142369 * r142398;
double r142400 = r142392 + r142399;
double r142401 = r142363 ? r142384 : r142400;
return r142401;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 3.224313048166206e-161Initial program 36.8
rmApplied cbrt-prod33.0
Taylor expanded around -inf 31.8
if 3.224313048166206e-161 < g Initial program 35.2
rmApplied cbrt-prod35.1
rmApplied cbrt-prod31.5
rmApplied difference-of-squares31.5
rmApplied flip-+31.4
Simplified30.8
Final simplification31.3
herbie shell --seed 2020020
(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))))))))