\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.572798755567817822478611563370450891348 \cdot 10^{-163}:\\
\;\;\;\;\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]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}} + \frac{\sqrt[3]{\frac{1 \cdot \left(h \cdot h\right)}{2 \cdot a}}}{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}\\
\end{array}double f(double g, double h, double a) {
double r4626802 = 1.0;
double r4626803 = 2.0;
double r4626804 = a;
double r4626805 = r4626803 * r4626804;
double r4626806 = r4626802 / r4626805;
double r4626807 = g;
double r4626808 = -r4626807;
double r4626809 = r4626807 * r4626807;
double r4626810 = h;
double r4626811 = r4626810 * r4626810;
double r4626812 = r4626809 - r4626811;
double r4626813 = sqrt(r4626812);
double r4626814 = r4626808 + r4626813;
double r4626815 = r4626806 * r4626814;
double r4626816 = cbrt(r4626815);
double r4626817 = r4626808 - r4626813;
double r4626818 = r4626806 * r4626817;
double r4626819 = cbrt(r4626818);
double r4626820 = r4626816 + r4626819;
return r4626820;
}
double f(double g, double h, double a) {
double r4626821 = g;
double r4626822 = -3.572798755567818e-163;
bool r4626823 = r4626821 <= r4626822;
double r4626824 = 1.0;
double r4626825 = 2.0;
double r4626826 = a;
double r4626827 = r4626825 * r4626826;
double r4626828 = r4626824 / r4626827;
double r4626829 = -r4626821;
double r4626830 = r4626821 * r4626821;
double r4626831 = h;
double r4626832 = r4626831 * r4626831;
double r4626833 = r4626830 - r4626832;
double r4626834 = sqrt(r4626833);
double r4626835 = r4626829 - r4626834;
double r4626836 = r4626828 * r4626835;
double r4626837 = cbrt(r4626836);
double r4626838 = r4626821 + r4626821;
double r4626839 = -r4626838;
double r4626840 = cbrt(r4626839);
double r4626841 = cbrt(r4626828);
double r4626842 = r4626840 * r4626841;
double r4626843 = r4626837 + r4626842;
double r4626844 = cbrt(r4626835);
double r4626845 = r4626841 * r4626844;
double r4626846 = r4626824 * r4626832;
double r4626847 = r4626846 / r4626827;
double r4626848 = cbrt(r4626847);
double r4626849 = r4626848 / r4626844;
double r4626850 = r4626845 + r4626849;
double r4626851 = r4626823 ? r4626843 : r4626850;
return r4626851;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.572798755567818e-163Initial program 34.6
rmApplied cbrt-prod30.8
Taylor expanded around -inf 31.0
Simplified31.0
if -3.572798755567818e-163 < g Initial program 36.2
rmApplied cbrt-prod32.0
rmApplied flip-+31.9
Applied associate-*r/32.0
Applied cbrt-div32.0
Simplified32.1
Final simplification31.6
herbie shell --seed 2019172 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))