\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.5914749870004055 \cdot 10^{-162}:\\
\;\;\;\;\sqrt[3]{\frac{\frac{h \cdot h}{g - \sqrt{\left(h + g\right) \cdot \left(g - h\right)}}}{a} \cdot \frac{-1}{2}} + \frac{\sqrt[3]{\sqrt{\left(h + g\right) \cdot \left(g - h\right)} - g}}{\sqrt[3]{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{\left(h + g\right) \cdot \left(g - h\right)} - g}{2 \cdot a}} + \frac{\sqrt[3]{\left(\sqrt{g + \sqrt{\left(h + g\right) \cdot \left(g - h\right)}} \cdot \sqrt{g + \sqrt{\left(h + g\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 r5104771 = 1.0;
double r5104772 = 2.0;
double r5104773 = a;
double r5104774 = r5104772 * r5104773;
double r5104775 = r5104771 / r5104774;
double r5104776 = g;
double r5104777 = -r5104776;
double r5104778 = r5104776 * r5104776;
double r5104779 = h;
double r5104780 = r5104779 * r5104779;
double r5104781 = r5104778 - r5104780;
double r5104782 = sqrt(r5104781);
double r5104783 = r5104777 + r5104782;
double r5104784 = r5104775 * r5104783;
double r5104785 = cbrt(r5104784);
double r5104786 = r5104777 - r5104782;
double r5104787 = r5104775 * r5104786;
double r5104788 = cbrt(r5104787);
double r5104789 = r5104785 + r5104788;
return r5104789;
}
double f(double g, double h, double a) {
double r5104790 = g;
double r5104791 = 1.5914749870004055e-162;
bool r5104792 = r5104790 <= r5104791;
double r5104793 = h;
double r5104794 = r5104793 * r5104793;
double r5104795 = r5104793 + r5104790;
double r5104796 = r5104790 - r5104793;
double r5104797 = r5104795 * r5104796;
double r5104798 = sqrt(r5104797);
double r5104799 = r5104790 - r5104798;
double r5104800 = r5104794 / r5104799;
double r5104801 = a;
double r5104802 = r5104800 / r5104801;
double r5104803 = -0.5;
double r5104804 = r5104802 * r5104803;
double r5104805 = cbrt(r5104804);
double r5104806 = r5104798 - r5104790;
double r5104807 = cbrt(r5104806);
double r5104808 = 2.0;
double r5104809 = r5104808 * r5104801;
double r5104810 = cbrt(r5104809);
double r5104811 = r5104807 / r5104810;
double r5104812 = r5104805 + r5104811;
double r5104813 = r5104806 / r5104809;
double r5104814 = cbrt(r5104813);
double r5104815 = r5104790 + r5104798;
double r5104816 = sqrt(r5104815);
double r5104817 = r5104816 * r5104816;
double r5104818 = r5104817 * r5104803;
double r5104819 = cbrt(r5104818);
double r5104820 = cbrt(r5104801);
double r5104821 = r5104819 / r5104820;
double r5104822 = r5104814 + r5104821;
double r5104823 = r5104792 ? r5104812 : r5104822;
return r5104823;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.5914749870004055e-162Initial program 35.5
Simplified35.5
rmApplied cbrt-div31.6
rmApplied flip-+31.5
Simplified30.8
if 1.5914749870004055e-162 < g Initial program 34.0
Simplified34.0
rmApplied associate-*l/34.0
Applied cbrt-div30.3
rmApplied add-sqr-sqrt30.3
Final simplification30.6
herbie shell --seed 2019139
(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))))))))