\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.2129274808481617 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{2 \cdot a}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}} + \left(-g\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{2 \cdot a}} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r2098270 = 1.0;
double r2098271 = 2.0;
double r2098272 = a;
double r2098273 = r2098271 * r2098272;
double r2098274 = r2098270 / r2098273;
double r2098275 = g;
double r2098276 = -r2098275;
double r2098277 = r2098275 * r2098275;
double r2098278 = h;
double r2098279 = r2098278 * r2098278;
double r2098280 = r2098277 - r2098279;
double r2098281 = sqrt(r2098280);
double r2098282 = r2098276 + r2098281;
double r2098283 = r2098274 * r2098282;
double r2098284 = cbrt(r2098283);
double r2098285 = r2098276 - r2098281;
double r2098286 = r2098274 * r2098285;
double r2098287 = cbrt(r2098286);
double r2098288 = r2098284 + r2098287;
return r2098288;
}
double f(double g, double h, double a) {
double r2098289 = g;
double r2098290 = -1.2129274808481617e-158;
bool r2098291 = r2098289 <= r2098290;
double r2098292 = -r2098289;
double r2098293 = r2098289 * r2098289;
double r2098294 = h;
double r2098295 = r2098294 * r2098294;
double r2098296 = r2098293 - r2098295;
double r2098297 = sqrt(r2098296);
double r2098298 = r2098292 - r2098297;
double r2098299 = 1.0;
double r2098300 = 2.0;
double r2098301 = a;
double r2098302 = r2098300 * r2098301;
double r2098303 = r2098299 / r2098302;
double r2098304 = r2098298 * r2098303;
double r2098305 = cbrt(r2098304);
double r2098306 = cbrt(r2098303);
double r2098307 = cbrt(r2098296);
double r2098308 = fabs(r2098307);
double r2098309 = sqrt(r2098307);
double r2098310 = r2098308 * r2098309;
double r2098311 = r2098310 + r2098292;
double r2098312 = cbrt(r2098311);
double r2098313 = r2098306 * r2098312;
double r2098314 = r2098305 + r2098313;
double r2098315 = r2098292 + r2098297;
double r2098316 = r2098315 * r2098303;
double r2098317 = cbrt(r2098316);
double r2098318 = r2098292 - r2098289;
double r2098319 = cbrt(r2098318);
double r2098320 = cbrt(r2098302);
double r2098321 = r2098319 / r2098320;
double r2098322 = r2098317 + r2098321;
double r2098323 = r2098291 ? r2098314 : r2098322;
return r2098323;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.2129274808481617e-158Initial program 34.1
rmApplied cbrt-prod30.4
rmApplied add-cube-cbrt30.4
Applied sqrt-prod30.4
Simplified30.4
if -1.2129274808481617e-158 < g Initial program 35.4
rmApplied associate-*l/35.4
Applied cbrt-div31.6
Taylor expanded around inf 30.6
Final simplification30.5
herbie shell --seed 2019156 +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))))))))