\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.719394348405648 \cdot 10^{-161}:\\
\;\;\;\;\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 r17946779 = 1.0;
double r17946780 = 2.0;
double r17946781 = a;
double r17946782 = r17946780 * r17946781;
double r17946783 = r17946779 / r17946782;
double r17946784 = g;
double r17946785 = -r17946784;
double r17946786 = r17946784 * r17946784;
double r17946787 = h;
double r17946788 = r17946787 * r17946787;
double r17946789 = r17946786 - r17946788;
double r17946790 = sqrt(r17946789);
double r17946791 = r17946785 + r17946790;
double r17946792 = r17946783 * r17946791;
double r17946793 = cbrt(r17946792);
double r17946794 = r17946785 - r17946790;
double r17946795 = r17946783 * r17946794;
double r17946796 = cbrt(r17946795);
double r17946797 = r17946793 + r17946796;
return r17946797;
}
double f(double g, double h, double a) {
double r17946798 = g;
double r17946799 = 2.719394348405648e-161;
bool r17946800 = r17946798 <= r17946799;
double r17946801 = r17946798 * r17946798;
double r17946802 = h;
double r17946803 = r17946802 * r17946802;
double r17946804 = r17946801 - r17946803;
double r17946805 = sqrt(r17946804);
double r17946806 = r17946805 + r17946798;
double r17946807 = -0.5;
double r17946808 = a;
double r17946809 = r17946807 / r17946808;
double r17946810 = r17946806 * r17946809;
double r17946811 = cbrt(r17946810);
double r17946812 = -r17946798;
double r17946813 = r17946812 - r17946798;
double r17946814 = cbrt(r17946813);
double r17946815 = 2.0;
double r17946816 = r17946815 * r17946808;
double r17946817 = cbrt(r17946816);
double r17946818 = r17946814 / r17946817;
double r17946819 = r17946811 + r17946818;
double r17946820 = r17946798 - r17946798;
double r17946821 = cbrt(r17946820);
double r17946822 = r17946821 / r17946817;
double r17946823 = r17946807 * r17946806;
double r17946824 = cbrt(r17946823);
double r17946825 = cbrt(r17946808);
double r17946826 = r17946824 / r17946825;
double r17946827 = r17946822 + r17946826;
double r17946828 = r17946800 ? r17946819 : r17946827;
return r17946828;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.719394348405648e-161Initial program 35.3
Simplified35.3
rmApplied cbrt-div31.8
Taylor expanded around -inf 31.0
Simplified31.0
if 2.719394348405648e-161 < g Initial program 34.3
Simplified34.3
rmApplied cbrt-div34.2
rmApplied associate-*l/34.2
Applied cbrt-div30.2
Taylor expanded around inf 30.1
Final simplification30.6
herbie shell --seed 2019107 +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))))))))