\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.218403312007064 \cdot 10^{-159}:\\
\;\;\;\;\sqrt[3]{\frac{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}{\frac{a}{\frac{1}{2}}}} + \sqrt[3]{\frac{\left(-g\right) - g}{\frac{\sqrt[3]{a}}{\sqrt{\frac{1}{2}}}}} \cdot \sqrt[3]{\frac{\sqrt{\frac{1}{2}}}{\sqrt[3]{a} \cdot \sqrt[3]{a}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{\frac{a}{\frac{1}{2}}}} + \frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{\frac{a}{\frac{1}{2}}}}\\
\end{array}double f(double g, double h, double a) {
double r19069356 = 1.0;
double r19069357 = 2.0;
double r19069358 = a;
double r19069359 = r19069357 * r19069358;
double r19069360 = r19069356 / r19069359;
double r19069361 = g;
double r19069362 = -r19069361;
double r19069363 = r19069361 * r19069361;
double r19069364 = h;
double r19069365 = r19069364 * r19069364;
double r19069366 = r19069363 - r19069365;
double r19069367 = sqrt(r19069366);
double r19069368 = r19069362 + r19069367;
double r19069369 = r19069360 * r19069368;
double r19069370 = cbrt(r19069369);
double r19069371 = r19069362 - r19069367;
double r19069372 = r19069360 * r19069371;
double r19069373 = cbrt(r19069372);
double r19069374 = r19069370 + r19069373;
return r19069374;
}
double f(double g, double h, double a) {
double r19069375 = g;
double r19069376 = 3.218403312007064e-159;
bool r19069377 = r19069375 <= r19069376;
double r19069378 = -r19069375;
double r19069379 = r19069375 * r19069375;
double r19069380 = h;
double r19069381 = r19069380 * r19069380;
double r19069382 = r19069379 - r19069381;
double r19069383 = sqrt(r19069382);
double r19069384 = r19069378 - r19069383;
double r19069385 = a;
double r19069386 = 0.5;
double r19069387 = r19069385 / r19069386;
double r19069388 = r19069384 / r19069387;
double r19069389 = cbrt(r19069388);
double r19069390 = r19069378 - r19069375;
double r19069391 = cbrt(r19069385);
double r19069392 = sqrt(r19069386);
double r19069393 = r19069391 / r19069392;
double r19069394 = r19069390 / r19069393;
double r19069395 = cbrt(r19069394);
double r19069396 = r19069391 * r19069391;
double r19069397 = r19069392 / r19069396;
double r19069398 = cbrt(r19069397);
double r19069399 = r19069395 * r19069398;
double r19069400 = r19069389 + r19069399;
double r19069401 = r19069383 - r19069375;
double r19069402 = r19069401 / r19069387;
double r19069403 = cbrt(r19069402);
double r19069404 = cbrt(r19069384);
double r19069405 = cbrt(r19069387);
double r19069406 = r19069404 / r19069405;
double r19069407 = r19069403 + r19069406;
double r19069408 = r19069377 ? r19069400 : r19069407;
return r19069408;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 3.218403312007064e-159Initial program 35.3
Simplified35.3
rmApplied add-sqr-sqrt35.3
Applied add-cube-cbrt35.4
Applied times-frac35.4
Applied *-un-lft-identity35.4
Applied *-un-lft-identity35.4
Applied distribute-lft-out--35.4
Applied times-frac35.4
Applied cbrt-prod31.9
Simplified31.9
Taylor expanded around -inf 31.3
Simplified31.3
if 3.218403312007064e-159 < g Initial program 34.3
Simplified34.2
rmApplied cbrt-div30.3
Final simplification30.8
herbie shell --seed 2019107
(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))))))))