\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.2198156791199691 \cdot 10^{-160}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \sqrt{g \cdot g - h \cdot h}} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{elif}\;g \le 4.3494482620317246 \cdot 10^{-142}:\\
\;\;\;\;\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}}\\
\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) - \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}}}\\
\end{array}double f(double g, double h, double a) {
double r168248 = 1.0;
double r168249 = 2.0;
double r168250 = a;
double r168251 = r168249 * r168250;
double r168252 = r168248 / r168251;
double r168253 = g;
double r168254 = -r168253;
double r168255 = r168253 * r168253;
double r168256 = h;
double r168257 = r168256 * r168256;
double r168258 = r168255 - r168257;
double r168259 = sqrt(r168258);
double r168260 = r168254 + r168259;
double r168261 = r168252 * r168260;
double r168262 = cbrt(r168261);
double r168263 = r168254 - r168259;
double r168264 = r168252 * r168263;
double r168265 = cbrt(r168264);
double r168266 = r168262 + r168265;
return r168266;
}
double f(double g, double h, double a) {
double r168267 = g;
double r168268 = -1.2198156791199691e-160;
bool r168269 = r168267 <= r168268;
double r168270 = 1.0;
double r168271 = 2.0;
double r168272 = a;
double r168273 = r168271 * r168272;
double r168274 = r168270 / r168273;
double r168275 = cbrt(r168274);
double r168276 = -r168267;
double r168277 = r168267 * r168267;
double r168278 = h;
double r168279 = r168278 * r168278;
double r168280 = r168277 - r168279;
double r168281 = sqrt(r168280);
double r168282 = r168276 + r168281;
double r168283 = cbrt(r168282);
double r168284 = r168275 * r168283;
double r168285 = r168276 - r168281;
double r168286 = r168274 * r168285;
double r168287 = cbrt(r168286);
double r168288 = r168284 + r168287;
double r168289 = 4.3494482620317246e-142;
bool r168290 = r168267 <= r168289;
double r168291 = r168274 * r168282;
double r168292 = cbrt(r168291);
double r168293 = r168276 - r168267;
double r168294 = r168270 * r168293;
double r168295 = cbrt(r168294);
double r168296 = cbrt(r168273);
double r168297 = r168295 / r168296;
double r168298 = r168292 + r168297;
double r168299 = cbrt(r168281);
double r168300 = r168299 * r168299;
double r168301 = r168300 * r168299;
double r168302 = r168276 - r168301;
double r168303 = cbrt(r168302);
double r168304 = r168275 * r168303;
double r168305 = r168292 + r168304;
double r168306 = r168290 ? r168298 : r168305;
double r168307 = r168269 ? r168288 : r168306;
return r168307;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.2198156791199691e-160Initial program 34.3
rmApplied cbrt-prod31.1
if -1.2198156791199691e-160 < g < 4.3494482620317246e-142Initial program 50.9
rmApplied associate-*l/50.9
Applied cbrt-div46.7
Taylor expanded around inf 35.5
if 4.3494482620317246e-142 < g Initial program 34.8
rmApplied cbrt-prod31.4
rmApplied add-cube-cbrt31.4
Final simplification31.5
herbie shell --seed 2020065 +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))))))))