\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 -2.10518339907436567 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\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 \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r160772 = 1.0;
double r160773 = 2.0;
double r160774 = a;
double r160775 = r160773 * r160774;
double r160776 = r160772 / r160775;
double r160777 = g;
double r160778 = -r160777;
double r160779 = r160777 * r160777;
double r160780 = h;
double r160781 = r160780 * r160780;
double r160782 = r160779 - r160781;
double r160783 = sqrt(r160782);
double r160784 = r160778 + r160783;
double r160785 = r160776 * r160784;
double r160786 = cbrt(r160785);
double r160787 = r160778 - r160783;
double r160788 = r160776 * r160787;
double r160789 = cbrt(r160788);
double r160790 = r160786 + r160789;
return r160790;
}
double f(double g, double h, double a) {
double r160791 = g;
double r160792 = -2.1051833990743657e-158;
bool r160793 = r160791 <= r160792;
double r160794 = 1.0;
double r160795 = 2.0;
double r160796 = a;
double r160797 = r160795 * r160796;
double r160798 = r160794 / r160797;
double r160799 = cbrt(r160798);
double r160800 = -r160791;
double r160801 = r160791 * r160791;
double r160802 = h;
double r160803 = r160802 * r160802;
double r160804 = r160801 - r160803;
double r160805 = cbrt(r160804);
double r160806 = fabs(r160805);
double r160807 = sqrt(r160805);
double r160808 = r160806 * r160807;
double r160809 = r160800 + r160808;
double r160810 = cbrt(r160809);
double r160811 = r160799 * r160810;
double r160812 = sqrt(r160804);
double r160813 = r160800 - r160812;
double r160814 = cbrt(r160813);
double r160815 = r160799 * r160814;
double r160816 = r160811 + r160815;
double r160817 = r160800 + r160812;
double r160818 = r160798 * r160817;
double r160819 = cbrt(r160818);
double r160820 = r160800 - r160791;
double r160821 = cbrt(r160820);
double r160822 = r160799 * r160821;
double r160823 = r160819 + r160822;
double r160824 = r160793 ? r160816 : r160823;
return r160824;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -2.1051833990743657e-158Initial program 33.7
rmApplied cbrt-prod33.7
rmApplied cbrt-prod30.1
rmApplied add-cube-cbrt30.1
Applied sqrt-prod30.1
Simplified30.1
if -2.1051833990743657e-158 < g Initial program 37.1
rmApplied cbrt-prod33.6
Taylor expanded around inf 32.2
Final simplification31.2
herbie shell --seed 2020060
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
:precision binary64
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))