\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 -3.035091110489776 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\sqrt{\left(g + h\right) \cdot \left(g - h\right)} - g} \cdot \sqrt[3]{\frac{\frac{1}{2}}{a}} + \sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(g + \sqrt{\left(g + h\right) \cdot \left(g - h\right)}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(g + g\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}} + \sqrt[3]{\left(\sqrt{\left(g + h\right) \cdot \left(g - h\right)} - g\right) \cdot \frac{\frac{1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r5620188 = 1.0;
double r5620189 = 2.0;
double r5620190 = a;
double r5620191 = r5620189 * r5620190;
double r5620192 = r5620188 / r5620191;
double r5620193 = g;
double r5620194 = -r5620193;
double r5620195 = r5620193 * r5620193;
double r5620196 = h;
double r5620197 = r5620196 * r5620196;
double r5620198 = r5620195 - r5620197;
double r5620199 = sqrt(r5620198);
double r5620200 = r5620194 + r5620199;
double r5620201 = r5620192 * r5620200;
double r5620202 = cbrt(r5620201);
double r5620203 = r5620194 - r5620199;
double r5620204 = r5620192 * r5620203;
double r5620205 = cbrt(r5620204);
double r5620206 = r5620202 + r5620205;
return r5620206;
}
double f(double g, double h, double a) {
double r5620207 = g;
double r5620208 = -3.035091110489776e-158;
bool r5620209 = r5620207 <= r5620208;
double r5620210 = h;
double r5620211 = r5620207 + r5620210;
double r5620212 = r5620207 - r5620210;
double r5620213 = r5620211 * r5620212;
double r5620214 = sqrt(r5620213);
double r5620215 = r5620214 - r5620207;
double r5620216 = cbrt(r5620215);
double r5620217 = 0.5;
double r5620218 = a;
double r5620219 = r5620217 / r5620218;
double r5620220 = cbrt(r5620219);
double r5620221 = r5620216 * r5620220;
double r5620222 = -0.5;
double r5620223 = r5620222 / r5620218;
double r5620224 = r5620207 + r5620214;
double r5620225 = r5620223 * r5620224;
double r5620226 = cbrt(r5620225);
double r5620227 = r5620221 + r5620226;
double r5620228 = r5620207 + r5620207;
double r5620229 = r5620228 * r5620222;
double r5620230 = cbrt(r5620229);
double r5620231 = cbrt(r5620218);
double r5620232 = r5620230 / r5620231;
double r5620233 = r5620215 * r5620219;
double r5620234 = cbrt(r5620233);
double r5620235 = r5620232 + r5620234;
double r5620236 = r5620209 ? r5620227 : r5620235;
return r5620236;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.035091110489776e-158Initial program 33.7
Simplified33.7
rmApplied cbrt-prod29.8
if -3.035091110489776e-158 < g Initial program 36.8
Simplified36.8
rmApplied associate-*l/36.8
Applied cbrt-div33.2
Taylor expanded around inf 32.4
Final simplification31.2
herbie shell --seed 2019163
(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))))))))