\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.5929545688553364 \cdot 10^{-160}:\\
\;\;\;\;\sqrt[3]{\left(g + \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{\frac{-1}{2}}{a}} + \sqrt[3]{\frac{\left(-g\right) - g}{2}} \cdot \sqrt[3]{\frac{1}{a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{-1}{2} \cdot \left(g + \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{a}} + \sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{\frac{a}{\frac{1}{2}}}}\\
\end{array}double f(double g, double h, double a) {
double r2394044 = 1.0;
double r2394045 = 2.0;
double r2394046 = a;
double r2394047 = r2394045 * r2394046;
double r2394048 = r2394044 / r2394047;
double r2394049 = g;
double r2394050 = -r2394049;
double r2394051 = r2394049 * r2394049;
double r2394052 = h;
double r2394053 = r2394052 * r2394052;
double r2394054 = r2394051 - r2394053;
double r2394055 = sqrt(r2394054);
double r2394056 = r2394050 + r2394055;
double r2394057 = r2394048 * r2394056;
double r2394058 = cbrt(r2394057);
double r2394059 = r2394050 - r2394055;
double r2394060 = r2394048 * r2394059;
double r2394061 = cbrt(r2394060);
double r2394062 = r2394058 + r2394061;
return r2394062;
}
double f(double g, double h, double a) {
double r2394063 = g;
double r2394064 = 2.5929545688553364e-160;
bool r2394065 = r2394063 <= r2394064;
double r2394066 = r2394063 * r2394063;
double r2394067 = h;
double r2394068 = r2394067 * r2394067;
double r2394069 = r2394066 - r2394068;
double r2394070 = sqrt(r2394069);
double r2394071 = r2394063 + r2394070;
double r2394072 = -0.5;
double r2394073 = a;
double r2394074 = r2394072 / r2394073;
double r2394075 = r2394071 * r2394074;
double r2394076 = cbrt(r2394075);
double r2394077 = -r2394063;
double r2394078 = r2394077 - r2394063;
double r2394079 = 2.0;
double r2394080 = r2394078 / r2394079;
double r2394081 = cbrt(r2394080);
double r2394082 = 1.0;
double r2394083 = r2394082 / r2394073;
double r2394084 = cbrt(r2394083);
double r2394085 = r2394081 * r2394084;
double r2394086 = r2394076 + r2394085;
double r2394087 = r2394072 * r2394071;
double r2394088 = cbrt(r2394087);
double r2394089 = cbrt(r2394073);
double r2394090 = r2394088 / r2394089;
double r2394091 = r2394070 - r2394063;
double r2394092 = 0.5;
double r2394093 = r2394073 / r2394092;
double r2394094 = r2394091 / r2394093;
double r2394095 = cbrt(r2394094);
double r2394096 = r2394090 + r2394095;
double r2394097 = r2394065 ? r2394086 : r2394096;
return r2394097;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.5929545688553364e-160Initial program 36.8
Simplified36.8
rmApplied div-inv36.8
Applied *-un-lft-identity36.8
Applied times-frac36.7
Applied cbrt-prod33.2
Simplified33.2
Taylor expanded around -inf 32.2
Simplified32.2
if 2.5929545688553364e-160 < g Initial program 34.1
Simplified34.1
rmApplied associate-*l/34.1
Applied cbrt-div30.6
Final simplification31.4
herbie shell --seed 2019154 +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))))))))