\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 -4.75774902155125 \cdot 10^{-156}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\left(-g\right) + \sqrt{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt{\sqrt{g \cdot g - h \cdot h}}} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\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}}}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + \left(-g\right)} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r26890350 = 1.0;
double r26890351 = 2.0;
double r26890352 = a;
double r26890353 = r26890351 * r26890352;
double r26890354 = r26890350 / r26890353;
double r26890355 = g;
double r26890356 = -r26890355;
double r26890357 = r26890355 * r26890355;
double r26890358 = h;
double r26890359 = r26890358 * r26890358;
double r26890360 = r26890357 - r26890359;
double r26890361 = sqrt(r26890360);
double r26890362 = r26890356 + r26890361;
double r26890363 = r26890354 * r26890362;
double r26890364 = cbrt(r26890363);
double r26890365 = r26890356 - r26890361;
double r26890366 = r26890354 * r26890365;
double r26890367 = cbrt(r26890366);
double r26890368 = r26890364 + r26890367;
return r26890368;
}
double f(double g, double h, double a) {
double r26890369 = g;
double r26890370 = -4.75774902155125e-156;
bool r26890371 = r26890369 <= r26890370;
double r26890372 = -r26890369;
double r26890373 = r26890369 * r26890369;
double r26890374 = h;
double r26890375 = r26890374 * r26890374;
double r26890376 = r26890373 - r26890375;
double r26890377 = sqrt(r26890376);
double r26890378 = r26890372 - r26890377;
double r26890379 = cbrt(r26890378);
double r26890380 = 2.0;
double r26890381 = a;
double r26890382 = r26890380 * r26890381;
double r26890383 = cbrt(r26890382);
double r26890384 = r26890379 / r26890383;
double r26890385 = sqrt(r26890377);
double r26890386 = r26890385 * r26890385;
double r26890387 = r26890372 + r26890386;
double r26890388 = cbrt(r26890387);
double r26890389 = 1.0;
double r26890390 = r26890389 / r26890382;
double r26890391 = cbrt(r26890390);
double r26890392 = r26890388 * r26890391;
double r26890393 = r26890384 + r26890392;
double r26890394 = cbrt(r26890377);
double r26890395 = r26890394 * r26890394;
double r26890396 = r26890395 * r26890394;
double r26890397 = r26890372 - r26890396;
double r26890398 = cbrt(r26890397);
double r26890399 = r26890398 / r26890383;
double r26890400 = r26890377 + r26890372;
double r26890401 = cbrt(r26890400);
double r26890402 = r26890401 * r26890391;
double r26890403 = r26890399 + r26890402;
double r26890404 = r26890371 ? r26890393 : r26890403;
return r26890404;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -4.75774902155125e-156Initial program 34.0
rmApplied cbrt-prod30.4
rmApplied associate-*l/30.4
Applied cbrt-div30.3
Simplified30.3
rmApplied add-sqr-sqrt30.3
if -4.75774902155125e-156 < g Initial program 35.9
rmApplied cbrt-prod35.5
rmApplied associate-*l/35.5
Applied cbrt-div32.3
Simplified32.3
rmApplied add-cube-cbrt32.3
Final simplification31.4
herbie shell --seed 2019125
(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))))))))