\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.0607805810600363 \cdot 10^{-188}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + g\right) \cdot \frac{\frac{-1}{2}}{a}} + \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{g - g}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{\frac{-1}{2} \cdot \left(\sqrt{g \cdot g - h \cdot h} + g\right)}}{\sqrt[3]{a}}\\
\end{array}double f(double g, double h, double a) {
double r18751730 = 1.0;
double r18751731 = 2.0;
double r18751732 = a;
double r18751733 = r18751731 * r18751732;
double r18751734 = r18751730 / r18751733;
double r18751735 = g;
double r18751736 = -r18751735;
double r18751737 = r18751735 * r18751735;
double r18751738 = h;
double r18751739 = r18751738 * r18751738;
double r18751740 = r18751737 - r18751739;
double r18751741 = sqrt(r18751740);
double r18751742 = r18751736 + r18751741;
double r18751743 = r18751734 * r18751742;
double r18751744 = cbrt(r18751743);
double r18751745 = r18751736 - r18751741;
double r18751746 = r18751734 * r18751745;
double r18751747 = cbrt(r18751746);
double r18751748 = r18751744 + r18751747;
return r18751748;
}
double f(double g, double h, double a) {
double r18751749 = g;
double r18751750 = 4.0607805810600363e-188;
bool r18751751 = r18751749 <= r18751750;
double r18751752 = r18751749 * r18751749;
double r18751753 = h;
double r18751754 = r18751753 * r18751753;
double r18751755 = r18751752 - r18751754;
double r18751756 = sqrt(r18751755);
double r18751757 = r18751756 + r18751749;
double r18751758 = -0.5;
double r18751759 = a;
double r18751760 = r18751758 / r18751759;
double r18751761 = r18751757 * r18751760;
double r18751762 = cbrt(r18751761);
double r18751763 = -r18751749;
double r18751764 = r18751763 - r18751749;
double r18751765 = cbrt(r18751764);
double r18751766 = 2.0;
double r18751767 = r18751766 * r18751759;
double r18751768 = cbrt(r18751767);
double r18751769 = r18751765 / r18751768;
double r18751770 = r18751762 + r18751769;
double r18751771 = r18751749 - r18751749;
double r18751772 = cbrt(r18751771);
double r18751773 = r18751772 / r18751768;
double r18751774 = r18751758 * r18751757;
double r18751775 = cbrt(r18751774);
double r18751776 = cbrt(r18751759);
double r18751777 = r18751775 / r18751776;
double r18751778 = r18751773 + r18751777;
double r18751779 = r18751751 ? r18751770 : r18751778;
return r18751779;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 4.0607805810600363e-188Initial program 35.5
Simplified35.5
rmApplied cbrt-div32.0
Taylor expanded around -inf 31.3
Simplified31.3
if 4.0607805810600363e-188 < g Initial program 34.3
Simplified34.3
rmApplied cbrt-div34.3
rmApplied associate-*l/34.3
Applied cbrt-div30.4
Taylor expanded around inf 30.2
Final simplification30.8
herbie shell --seed 2019121 +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))))))))