\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.732713041008813 \cdot 10^{-185}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{-\left(g + g\right)} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}} + \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]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r4999616 = 1.0;
double r4999617 = 2.0;
double r4999618 = a;
double r4999619 = r4999617 * r4999618;
double r4999620 = r4999616 / r4999619;
double r4999621 = g;
double r4999622 = -r4999621;
double r4999623 = r4999621 * r4999621;
double r4999624 = h;
double r4999625 = r4999624 * r4999624;
double r4999626 = r4999623 - r4999625;
double r4999627 = sqrt(r4999626);
double r4999628 = r4999622 + r4999627;
double r4999629 = r4999620 * r4999628;
double r4999630 = cbrt(r4999629);
double r4999631 = r4999622 - r4999627;
double r4999632 = r4999620 * r4999631;
double r4999633 = cbrt(r4999632);
double r4999634 = r4999630 + r4999633;
return r4999634;
}
double f(double g, double h, double a) {
double r4999635 = g;
double r4999636 = 4.732713041008813e-185;
bool r4999637 = r4999635 <= r4999636;
double r4999638 = 1.0;
double r4999639 = 2.0;
double r4999640 = a;
double r4999641 = r4999639 * r4999640;
double r4999642 = r4999638 / r4999641;
double r4999643 = -r4999635;
double r4999644 = r4999635 * r4999635;
double r4999645 = h;
double r4999646 = r4999645 * r4999645;
double r4999647 = r4999644 - r4999646;
double r4999648 = sqrt(r4999647);
double r4999649 = r4999643 - r4999648;
double r4999650 = r4999642 * r4999649;
double r4999651 = cbrt(r4999650);
double r4999652 = r4999635 + r4999635;
double r4999653 = -r4999652;
double r4999654 = cbrt(r4999653);
double r4999655 = cbrt(r4999642);
double r4999656 = r4999654 * r4999655;
double r4999657 = r4999651 + r4999656;
double r4999658 = r4999648 + r4999643;
double r4999659 = r4999658 * r4999642;
double r4999660 = cbrt(r4999659);
double r4999661 = cbrt(r4999648);
double r4999662 = r4999661 * r4999661;
double r4999663 = r4999661 * r4999662;
double r4999664 = r4999643 - r4999663;
double r4999665 = cbrt(r4999664);
double r4999666 = cbrt(r4999641);
double r4999667 = r4999665 / r4999666;
double r4999668 = r4999660 + r4999667;
double r4999669 = r4999637 ? r4999657 : r4999668;
return r4999669;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 4.732713041008813e-185Initial program 35.9
rmApplied cbrt-prod32.2
Taylor expanded around -inf 31.7
Simplified31.7
if 4.732713041008813e-185 < g Initial program 34.6
rmApplied associate-*l/34.6
Applied cbrt-div30.7
Simplified30.7
rmApplied add-cube-cbrt30.7
Final simplification31.2
herbie shell --seed 2019129 +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))))))))