\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.5727253310874222 \cdot 10^{-162}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{h \cdot h}{g - \sqrt{\left(g - h\right) \cdot \left(g + h\right)}} \cdot \frac{-1}{2}}}{\sqrt[3]{a}} + \sqrt[3]{\frac{\sqrt{\left(g - h\right) \cdot \left(g + h\right)} - g}{2}} \cdot \sqrt[3]{\frac{1}{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{-h \cdot h}{g + \sqrt{\left(g - h\right) \cdot \left(g + h\right)}}} \cdot \sqrt[3]{\frac{\frac{1}{2}}{a}} + \frac{\sqrt[3]{\left(g + \sqrt{\left(g - h\right) \cdot \left(g + h\right)}\right) \cdot \frac{-1}{2}}}{\sqrt[3]{a}}\\
\end{array}double f(double g, double h, double a) {
double r6086811 = 1.0;
double r6086812 = 2.0;
double r6086813 = a;
double r6086814 = r6086812 * r6086813;
double r6086815 = r6086811 / r6086814;
double r6086816 = g;
double r6086817 = -r6086816;
double r6086818 = r6086816 * r6086816;
double r6086819 = h;
double r6086820 = r6086819 * r6086819;
double r6086821 = r6086818 - r6086820;
double r6086822 = sqrt(r6086821);
double r6086823 = r6086817 + r6086822;
double r6086824 = r6086815 * r6086823;
double r6086825 = cbrt(r6086824);
double r6086826 = r6086817 - r6086822;
double r6086827 = r6086815 * r6086826;
double r6086828 = cbrt(r6086827);
double r6086829 = r6086825 + r6086828;
return r6086829;
}
double f(double g, double h, double a) {
double r6086830 = g;
double r6086831 = -1.5727253310874222e-162;
bool r6086832 = r6086830 <= r6086831;
double r6086833 = h;
double r6086834 = r6086833 * r6086833;
double r6086835 = r6086830 - r6086833;
double r6086836 = r6086830 + r6086833;
double r6086837 = r6086835 * r6086836;
double r6086838 = sqrt(r6086837);
double r6086839 = r6086830 - r6086838;
double r6086840 = r6086834 / r6086839;
double r6086841 = -0.5;
double r6086842 = r6086840 * r6086841;
double r6086843 = cbrt(r6086842);
double r6086844 = a;
double r6086845 = cbrt(r6086844);
double r6086846 = r6086843 / r6086845;
double r6086847 = r6086838 - r6086830;
double r6086848 = 2.0;
double r6086849 = r6086847 / r6086848;
double r6086850 = cbrt(r6086849);
double r6086851 = 1.0;
double r6086852 = r6086851 / r6086844;
double r6086853 = cbrt(r6086852);
double r6086854 = r6086850 * r6086853;
double r6086855 = r6086846 + r6086854;
double r6086856 = -r6086834;
double r6086857 = r6086830 + r6086838;
double r6086858 = r6086856 / r6086857;
double r6086859 = cbrt(r6086858);
double r6086860 = 0.5;
double r6086861 = r6086860 / r6086844;
double r6086862 = cbrt(r6086861);
double r6086863 = r6086859 * r6086862;
double r6086864 = r6086857 * r6086841;
double r6086865 = cbrt(r6086864);
double r6086866 = r6086865 / r6086845;
double r6086867 = r6086863 + r6086866;
double r6086868 = r6086832 ? r6086855 : r6086867;
return r6086868;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.5727253310874222e-162Initial program 35.0
Simplified34.9
rmApplied associate-*r/34.9
Applied cbrt-div34.9
rmApplied *-un-lft-identity34.9
Applied *-un-lft-identity34.9
Applied distribute-lft-out--34.9
Applied times-frac34.9
Applied cbrt-prod30.7
rmApplied flip-+30.6
Simplified29.5
if -1.5727253310874222e-162 < g Initial program 36.9
Simplified36.9
rmApplied associate-*r/36.9
Applied cbrt-div33.4
rmApplied div-inv33.4
Applied cbrt-prod33.3
Simplified33.3
rmApplied flip--33.2
Simplified32.3
Final simplification31.0
herbie shell --seed 2019133
(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))))))))