\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 3.2243130481662061 \cdot 10^{-161}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + -1 \cdot g} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\frac{\mathsf{fma}\left(h, h, 0\right)}{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\end{array}double f(double g, double h, double a) {
double r174035 = 1.0;
double r174036 = 2.0;
double r174037 = a;
double r174038 = r174036 * r174037;
double r174039 = r174035 / r174038;
double r174040 = g;
double r174041 = -r174040;
double r174042 = r174040 * r174040;
double r174043 = h;
double r174044 = r174043 * r174043;
double r174045 = r174042 - r174044;
double r174046 = sqrt(r174045);
double r174047 = r174041 + r174046;
double r174048 = r174039 * r174047;
double r174049 = cbrt(r174048);
double r174050 = r174041 - r174046;
double r174051 = r174039 * r174050;
double r174052 = cbrt(r174051);
double r174053 = r174049 + r174052;
return r174053;
}
double f(double g, double h, double a) {
double r174054 = g;
double r174055 = 3.224313048166206e-161;
bool r174056 = r174054 <= r174055;
double r174057 = 1.0;
double r174058 = 2.0;
double r174059 = a;
double r174060 = r174058 * r174059;
double r174061 = r174057 / r174060;
double r174062 = cbrt(r174061);
double r174063 = -r174054;
double r174064 = -1.0;
double r174065 = r174064 * r174054;
double r174066 = r174063 + r174065;
double r174067 = cbrt(r174066);
double r174068 = r174062 * r174067;
double r174069 = r174054 * r174054;
double r174070 = h;
double r174071 = r174070 * r174070;
double r174072 = r174069 - r174071;
double r174073 = sqrt(r174072);
double r174074 = r174063 - r174073;
double r174075 = r174061 * r174074;
double r174076 = cbrt(r174075);
double r174077 = r174068 + r174076;
double r174078 = 0.0;
double r174079 = fma(r174070, r174070, r174078);
double r174080 = r174079 / r174074;
double r174081 = cbrt(r174080);
double r174082 = r174062 * r174081;
double r174083 = cbrt(r174074);
double r174084 = r174062 * r174083;
double r174085 = r174082 + r174084;
double r174086 = r174056 ? r174077 : r174085;
return r174086;
}



Bits error versus g



Bits error versus h



Bits error versus a
if g < 3.224313048166206e-161Initial program 36.8
rmApplied cbrt-prod33.0
Taylor expanded around -inf 31.8
if 3.224313048166206e-161 < g Initial program 35.2
rmApplied cbrt-prod35.1
rmApplied cbrt-prod31.5
rmApplied flip-+31.4
Simplified30.8
Final simplification31.3
herbie shell --seed 2020020 +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))))))))