\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)}\frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}}double f(double g, double h, double a) {
double r107853 = 1.0;
double r107854 = 2.0;
double r107855 = a;
double r107856 = r107854 * r107855;
double r107857 = r107853 / r107856;
double r107858 = g;
double r107859 = -r107858;
double r107860 = r107858 * r107858;
double r107861 = h;
double r107862 = r107861 * r107861;
double r107863 = r107860 - r107862;
double r107864 = sqrt(r107863);
double r107865 = r107859 + r107864;
double r107866 = r107857 * r107865;
double r107867 = cbrt(r107866);
double r107868 = r107859 - r107864;
double r107869 = r107857 * r107868;
double r107870 = cbrt(r107869);
double r107871 = r107867 + r107870;
return r107871;
}
double f(double g, double h, double a) {
double r107872 = 1.0;
double r107873 = g;
double r107874 = r107873 * r107873;
double r107875 = h;
double r107876 = r107875 * r107875;
double r107877 = r107874 - r107876;
double r107878 = sqrt(r107877);
double r107879 = r107878 - r107873;
double r107880 = r107872 * r107879;
double r107881 = cbrt(r107880);
double r107882 = 2.0;
double r107883 = a;
double r107884 = r107882 * r107883;
double r107885 = cbrt(r107884);
double r107886 = r107881 / r107885;
double r107887 = -r107873;
double r107888 = r107887 - r107878;
double r107889 = r107872 * r107888;
double r107890 = cbrt(r107889);
double r107891 = r107890 / r107885;
double r107892 = r107886 + r107891;
return r107892;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
Initial program 36.0
Simplified36.0
rmApplied associate-*l/36.0
Applied cbrt-div34.1
rmApplied associate-*l/34.1
Applied cbrt-div32.1
Final simplification32.1
herbie shell --seed 2019212 +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))))))))