\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.6459856019794505 \cdot 10^{-166}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g\right) \cdot \frac{\frac{-1}{2}}{a}} + \sqrt[3]{\left(-g\right) - g} \cdot \sqrt[3]{\frac{\frac{1}{2}}{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{-h \cdot h}{\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g}} \cdot \sqrt[3]{\frac{\frac{1}{2}}{a}} + \sqrt[3]{\sqrt{\left(h + g\right) \cdot \left(g - h\right)} + g} \cdot \sqrt[3]{\frac{\frac{-1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r6114804 = 1.0;
double r6114805 = 2.0;
double r6114806 = a;
double r6114807 = r6114805 * r6114806;
double r6114808 = r6114804 / r6114807;
double r6114809 = g;
double r6114810 = -r6114809;
double r6114811 = r6114809 * r6114809;
double r6114812 = h;
double r6114813 = r6114812 * r6114812;
double r6114814 = r6114811 - r6114813;
double r6114815 = sqrt(r6114814);
double r6114816 = r6114810 + r6114815;
double r6114817 = r6114808 * r6114816;
double r6114818 = cbrt(r6114817);
double r6114819 = r6114810 - r6114815;
double r6114820 = r6114808 * r6114819;
double r6114821 = cbrt(r6114820);
double r6114822 = r6114818 + r6114821;
return r6114822;
}
double f(double g, double h, double a) {
double r6114823 = g;
double r6114824 = 2.6459856019794505e-166;
bool r6114825 = r6114823 <= r6114824;
double r6114826 = h;
double r6114827 = r6114826 + r6114823;
double r6114828 = r6114823 - r6114826;
double r6114829 = r6114827 * r6114828;
double r6114830 = sqrt(r6114829);
double r6114831 = r6114830 + r6114823;
double r6114832 = -0.5;
double r6114833 = a;
double r6114834 = r6114832 / r6114833;
double r6114835 = r6114831 * r6114834;
double r6114836 = cbrt(r6114835);
double r6114837 = -r6114823;
double r6114838 = r6114837 - r6114823;
double r6114839 = cbrt(r6114838);
double r6114840 = 0.5;
double r6114841 = r6114840 / r6114833;
double r6114842 = cbrt(r6114841);
double r6114843 = r6114839 * r6114842;
double r6114844 = r6114836 + r6114843;
double r6114845 = r6114826 * r6114826;
double r6114846 = -r6114845;
double r6114847 = r6114846 / r6114831;
double r6114848 = cbrt(r6114847);
double r6114849 = r6114848 * r6114842;
double r6114850 = cbrt(r6114831);
double r6114851 = cbrt(r6114834);
double r6114852 = r6114850 * r6114851;
double r6114853 = r6114849 + r6114852;
double r6114854 = r6114825 ? r6114844 : r6114853;
return r6114854;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.6459856019794505e-166Initial program 35.6
Simplified35.5
rmApplied cbrt-prod31.7
Taylor expanded around -inf 30.9
Simplified30.9
if 2.6459856019794505e-166 < g Initial program 33.5
Simplified33.5
rmApplied cbrt-prod33.5
rmApplied cbrt-prod29.8
rmApplied flip--29.7
Simplified28.7
Final simplification29.9
herbie shell --seed 2019158
(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))))))))