\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.9672653841540804 \cdot 10^{-62}:\\
\;\;\;\;\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\frac{1}{2 \cdot a}} + \sqrt[3]{\left(-g\right) + \mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\sqrt{g \cdot g - h \cdot h}\right)\right)\right)\right)} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{h \cdot h}}{\sqrt[3]{\left(2 \cdot a\right) \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}} + \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r13301799 = 1.0;
double r13301800 = 2.0;
double r13301801 = a;
double r13301802 = r13301800 * r13301801;
double r13301803 = r13301799 / r13301802;
double r13301804 = g;
double r13301805 = -r13301804;
double r13301806 = r13301804 * r13301804;
double r13301807 = h;
double r13301808 = r13301807 * r13301807;
double r13301809 = r13301806 - r13301808;
double r13301810 = sqrt(r13301809);
double r13301811 = r13301805 + r13301810;
double r13301812 = r13301803 * r13301811;
double r13301813 = cbrt(r13301812);
double r13301814 = r13301805 - r13301810;
double r13301815 = r13301803 * r13301814;
double r13301816 = cbrt(r13301815);
double r13301817 = r13301813 + r13301816;
return r13301817;
}
double f(double g, double h, double a) {
double r13301818 = g;
double r13301819 = 1.9672653841540804e-62;
bool r13301820 = r13301818 <= r13301819;
double r13301821 = -r13301818;
double r13301822 = r13301818 * r13301818;
double r13301823 = h;
double r13301824 = r13301823 * r13301823;
double r13301825 = r13301822 - r13301824;
double r13301826 = sqrt(r13301825);
double r13301827 = r13301821 - r13301826;
double r13301828 = cbrt(r13301827);
double r13301829 = 1.0;
double r13301830 = 2.0;
double r13301831 = a;
double r13301832 = r13301830 * r13301831;
double r13301833 = r13301829 / r13301832;
double r13301834 = cbrt(r13301833);
double r13301835 = r13301828 * r13301834;
double r13301836 = log1p(r13301826);
double r13301837 = expm1(r13301836);
double r13301838 = r13301821 + r13301837;
double r13301839 = cbrt(r13301838);
double r13301840 = r13301839 * r13301834;
double r13301841 = r13301835 + r13301840;
double r13301842 = cbrt(r13301824);
double r13301843 = r13301832 * r13301827;
double r13301844 = cbrt(r13301843);
double r13301845 = r13301842 / r13301844;
double r13301846 = r13301845 + r13301835;
double r13301847 = r13301820 ? r13301841 : r13301846;
return r13301847;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.9672653841540804e-62Initial program 34.6
rmApplied cbrt-prod33.6
rmApplied cbrt-prod30.4
rmApplied expm1-log1p-u30.9
if 1.9672653841540804e-62 < g Initial program 36.4
rmApplied cbrt-prod33.3
rmApplied flip-+33.3
Applied frac-times33.4
Applied cbrt-div33.4
Simplified32.6
Final simplification31.6
herbie shell --seed 2019124 +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))))))))