\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 -2.5831109636145956 \cdot 10^{-186}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - -1 \cdot g}\\
\mathbf{else}:\\
\;\;\;\;\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 \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r270278 = 1.0;
double r270279 = 2.0;
double r270280 = a;
double r270281 = r270279 * r270280;
double r270282 = r270278 / r270281;
double r270283 = g;
double r270284 = -r270283;
double r270285 = r270283 * r270283;
double r270286 = h;
double r270287 = r270286 * r270286;
double r270288 = r270285 - r270287;
double r270289 = sqrt(r270288);
double r270290 = r270284 + r270289;
double r270291 = r270282 * r270290;
double r270292 = cbrt(r270291);
double r270293 = r270284 - r270289;
double r270294 = r270282 * r270293;
double r270295 = cbrt(r270294);
double r270296 = r270292 + r270295;
return r270296;
}
double f(double g, double h, double a) {
double r270297 = g;
double r270298 = -2.5831109636145956e-186;
bool r270299 = r270297 <= r270298;
double r270300 = 1.0;
double r270301 = -r270297;
double r270302 = r270297 * r270297;
double r270303 = h;
double r270304 = r270303 * r270303;
double r270305 = r270302 - r270304;
double r270306 = sqrt(r270305);
double r270307 = r270301 + r270306;
double r270308 = r270300 * r270307;
double r270309 = cbrt(r270308);
double r270310 = 2.0;
double r270311 = a;
double r270312 = r270310 * r270311;
double r270313 = cbrt(r270312);
double r270314 = r270309 / r270313;
double r270315 = r270300 / r270312;
double r270316 = cbrt(r270315);
double r270317 = -1.0;
double r270318 = r270317 * r270297;
double r270319 = r270301 - r270318;
double r270320 = cbrt(r270319);
double r270321 = r270316 * r270320;
double r270322 = r270314 + r270321;
double r270323 = r270315 * r270307;
double r270324 = cbrt(r270323);
double r270325 = r270301 - r270297;
double r270326 = cbrt(r270325);
double r270327 = r270316 * r270326;
double r270328 = r270324 + r270327;
double r270329 = r270299 ? r270322 : r270328;
return r270329;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.5831109636145956e-186Initial program 34.9
rmApplied cbrt-prod34.8
rmApplied associate-*l/34.8
Applied cbrt-div31.4
Taylor expanded around -inf 31.7
if -2.5831109636145956e-186 < g Initial program 36.4
rmApplied cbrt-prod33.0
Taylor expanded around inf 31.9
Final simplification31.8
herbie shell --seed 2020046
(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))))))))