\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 7.3048056976364 \cdot 10^{-159}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{a \cdot 2}} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{a \cdot 2}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-g\right) - \sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right)}}{\sqrt[3]{a \cdot 2}} + \sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)}\\
\end{array}double f(double g, double h, double a) {
double r4059212 = 1.0;
double r4059213 = 2.0;
double r4059214 = a;
double r4059215 = r4059213 * r4059214;
double r4059216 = r4059212 / r4059215;
double r4059217 = g;
double r4059218 = -r4059217;
double r4059219 = r4059217 * r4059217;
double r4059220 = h;
double r4059221 = r4059220 * r4059220;
double r4059222 = r4059219 - r4059221;
double r4059223 = sqrt(r4059222);
double r4059224 = r4059218 + r4059223;
double r4059225 = r4059216 * r4059224;
double r4059226 = cbrt(r4059225);
double r4059227 = r4059218 - r4059223;
double r4059228 = r4059216 * r4059227;
double r4059229 = cbrt(r4059228);
double r4059230 = r4059226 + r4059229;
return r4059230;
}
double f(double g, double h, double a) {
double r4059231 = g;
double r4059232 = 7.3048056976364e-159;
bool r4059233 = r4059231 <= r4059232;
double r4059234 = -r4059231;
double r4059235 = r4059231 * r4059231;
double r4059236 = h;
double r4059237 = r4059236 * r4059236;
double r4059238 = r4059235 - r4059237;
double r4059239 = sqrt(r4059238);
double r4059240 = r4059234 - r4059239;
double r4059241 = 1.0;
double r4059242 = a;
double r4059243 = 2.0;
double r4059244 = r4059242 * r4059243;
double r4059245 = r4059241 / r4059244;
double r4059246 = r4059240 * r4059245;
double r4059247 = cbrt(r4059246);
double r4059248 = r4059234 - r4059231;
double r4059249 = cbrt(r4059248);
double r4059250 = cbrt(r4059244);
double r4059251 = r4059249 / r4059250;
double r4059252 = r4059247 + r4059251;
double r4059253 = cbrt(r4059239);
double r4059254 = r4059253 * r4059253;
double r4059255 = r4059253 * r4059254;
double r4059256 = r4059234 - r4059255;
double r4059257 = cbrt(r4059256);
double r4059258 = r4059257 / r4059250;
double r4059259 = r4059234 + r4059239;
double r4059260 = r4059245 * r4059259;
double r4059261 = cbrt(r4059260);
double r4059262 = r4059258 + r4059261;
double r4059263 = r4059233 ? r4059252 : r4059262;
return r4059263;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 7.3048056976364e-159Initial program 36.3
rmApplied associate-*l/36.3
Applied cbrt-div32.9
Simplified32.9
Taylor expanded around -inf 32.0
Simplified32.0
if 7.3048056976364e-159 < g Initial program 34.0
rmApplied associate-*l/34.0
Applied cbrt-div30.4
Simplified30.4
rmApplied add-cube-cbrt30.4
Final simplification31.3
herbie shell --seed 2019146 +o rules:numerics
(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))))))))