\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 6.382883611553767 \cdot 10^{-167}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g\right) \cdot \frac{\frac{-1}{2}}{a}} + \frac{\sqrt[3]{\frac{1}{2} \cdot \left(\left(-g\right) - g\right)}}{\sqrt[3]{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} - g\right) \cdot \frac{\frac{1}{2}}{a}} + \frac{\sqrt[3]{\frac{-1}{2} \cdot \left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g\right)}}{\sqrt[3]{a}}\\
\end{array}double f(double g, double h, double a) {
double r5522264 = 1.0;
double r5522265 = 2.0;
double r5522266 = a;
double r5522267 = r5522265 * r5522266;
double r5522268 = r5522264 / r5522267;
double r5522269 = g;
double r5522270 = -r5522269;
double r5522271 = r5522269 * r5522269;
double r5522272 = h;
double r5522273 = r5522272 * r5522272;
double r5522274 = r5522271 - r5522273;
double r5522275 = sqrt(r5522274);
double r5522276 = r5522270 + r5522275;
double r5522277 = r5522268 * r5522276;
double r5522278 = cbrt(r5522277);
double r5522279 = r5522270 - r5522275;
double r5522280 = r5522268 * r5522279;
double r5522281 = cbrt(r5522280);
double r5522282 = r5522278 + r5522281;
return r5522282;
}
double f(double g, double h, double a) {
double r5522283 = g;
double r5522284 = 6.382883611553767e-167;
bool r5522285 = r5522283 <= r5522284;
double r5522286 = h;
double r5522287 = r5522286 + r5522283;
double r5522288 = r5522283 - r5522286;
double r5522289 = r5522287 * r5522288;
double r5522290 = sqrt(r5522289);
double r5522291 = r5522290 + r5522283;
double r5522292 = -0.5;
double r5522293 = a;
double r5522294 = r5522292 / r5522293;
double r5522295 = r5522291 * r5522294;
double r5522296 = cbrt(r5522295);
double r5522297 = 0.5;
double r5522298 = -r5522283;
double r5522299 = r5522298 - r5522283;
double r5522300 = r5522297 * r5522299;
double r5522301 = cbrt(r5522300);
double r5522302 = cbrt(r5522293);
double r5522303 = r5522301 / r5522302;
double r5522304 = r5522296 + r5522303;
double r5522305 = r5522290 - r5522283;
double r5522306 = r5522297 / r5522293;
double r5522307 = r5522305 * r5522306;
double r5522308 = cbrt(r5522307);
double r5522309 = r5522292 * r5522291;
double r5522310 = cbrt(r5522309);
double r5522311 = r5522310 / r5522302;
double r5522312 = r5522308 + r5522311;
double r5522313 = r5522285 ? r5522304 : r5522312;
return r5522313;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 6.382883611553767e-167Initial program 36.1
Simplified36.1
rmApplied associate-*l/36.1
Applied cbrt-div32.6
Taylor expanded around -inf 31.8
Simplified31.8
if 6.382883611553767e-167 < g Initial program 34.3
Simplified34.3
rmApplied associate-*l/34.3
Applied cbrt-div30.6
Final simplification31.2
herbie shell --seed 2019164
(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))))))))