\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 4.0607805810600363 \cdot 10^{-188}:\\
\;\;\;\;\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}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r18953181 = 1.0;
double r18953182 = 2.0;
double r18953183 = a;
double r18953184 = r18953182 * r18953183;
double r18953185 = r18953181 / r18953184;
double r18953186 = g;
double r18953187 = -r18953186;
double r18953188 = r18953186 * r18953186;
double r18953189 = h;
double r18953190 = r18953189 * r18953189;
double r18953191 = r18953188 - r18953190;
double r18953192 = sqrt(r18953191);
double r18953193 = r18953187 + r18953192;
double r18953194 = r18953185 * r18953193;
double r18953195 = cbrt(r18953194);
double r18953196 = r18953187 - r18953192;
double r18953197 = r18953185 * r18953196;
double r18953198 = cbrt(r18953197);
double r18953199 = r18953195 + r18953198;
return r18953199;
}
double f(double g, double h, double a) {
double r18953200 = g;
double r18953201 = 4.0607805810600363e-188;
bool r18953202 = r18953200 <= r18953201;
double r18953203 = -r18953200;
double r18953204 = r18953200 * r18953200;
double r18953205 = h;
double r18953206 = r18953205 * r18953205;
double r18953207 = r18953204 - r18953206;
double r18953208 = sqrt(r18953207);
double r18953209 = r18953203 - r18953208;
double r18953210 = 1.0;
double r18953211 = a;
double r18953212 = 2.0;
double r18953213 = r18953211 * r18953212;
double r18953214 = r18953210 / r18953213;
double r18953215 = r18953209 * r18953214;
double r18953216 = cbrt(r18953215);
double r18953217 = r18953203 - r18953200;
double r18953218 = cbrt(r18953217);
double r18953219 = cbrt(r18953213);
double r18953220 = r18953218 / r18953219;
double r18953221 = r18953216 + r18953220;
double r18953222 = r18953203 + r18953208;
double r18953223 = r18953214 * r18953222;
double r18953224 = cbrt(r18953223);
double r18953225 = cbrt(r18953209);
double r18953226 = r18953225 / r18953219;
double r18953227 = r18953224 + r18953226;
double r18953228 = r18953202 ? r18953221 : r18953227;
return r18953228;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 4.0607805810600363e-188Initial program 35.5
rmApplied associate-*l/35.5
Applied cbrt-div32.0
Simplified32.0
Taylor expanded around -inf 31.3
Simplified31.3
if 4.0607805810600363e-188 < g Initial program 34.3
rmApplied associate-*l/34.3
Applied cbrt-div30.5
Simplified30.5
Final simplification30.9
herbie shell --seed 2019121
(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))))))))