\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.651480181213853540846755577960497248466 \cdot 10^{-243}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g + h} \cdot \sqrt{g - h}}\\
\end{array}double f(double g, double h, double a) {
double r149775 = 1.0;
double r149776 = 2.0;
double r149777 = a;
double r149778 = r149776 * r149777;
double r149779 = r149775 / r149778;
double r149780 = g;
double r149781 = -r149780;
double r149782 = r149780 * r149780;
double r149783 = h;
double r149784 = r149783 * r149783;
double r149785 = r149782 - r149784;
double r149786 = sqrt(r149785);
double r149787 = r149781 + r149786;
double r149788 = r149779 * r149787;
double r149789 = cbrt(r149788);
double r149790 = r149781 - r149786;
double r149791 = r149779 * r149790;
double r149792 = cbrt(r149791);
double r149793 = r149789 + r149792;
return r149793;
}
double f(double g, double h, double a) {
double r149794 = g;
double r149795 = 1.6514801812138535e-243;
bool r149796 = r149794 <= r149795;
double r149797 = 1.0;
double r149798 = 2.0;
double r149799 = a;
double r149800 = r149798 * r149799;
double r149801 = r149797 / r149800;
double r149802 = cbrt(r149801);
double r149803 = -r149794;
double r149804 = r149803 - r149794;
double r149805 = cbrt(r149804);
double r149806 = r149802 * r149805;
double r149807 = r149794 * r149794;
double r149808 = h;
double r149809 = r149808 * r149808;
double r149810 = r149807 - r149809;
double r149811 = sqrt(r149810);
double r149812 = r149803 - r149811;
double r149813 = r149801 * r149812;
double r149814 = cbrt(r149813);
double r149815 = r149806 + r149814;
double r149816 = r149811 - r149794;
double r149817 = r149801 * r149816;
double r149818 = cbrt(r149817);
double r149819 = r149794 + r149808;
double r149820 = sqrt(r149819);
double r149821 = r149794 - r149808;
double r149822 = sqrt(r149821);
double r149823 = r149820 * r149822;
double r149824 = r149803 - r149823;
double r149825 = cbrt(r149824);
double r149826 = r149802 * r149825;
double r149827 = r149818 + r149826;
double r149828 = r149796 ? r149815 : r149827;
return r149828;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.6514801812138535e-243Initial program 36.3
Simplified36.3
rmApplied cbrt-prod32.4
Taylor expanded around -inf 31.7
Simplified31.7
if 1.6514801812138535e-243 < g Initial program 36.1
Simplified36.1
rmApplied cbrt-prod32.3
rmApplied difference-of-squares32.3
Applied sqrt-prod31.7
Final simplification31.7
herbie shell --seed 2019350 +o rules:numerics
(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))))))))