\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.1044730434263153 \cdot 10^{-162}:\\
\;\;\;\;\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{g - g}{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r5222062 = 1.0;
double r5222063 = 2.0;
double r5222064 = a;
double r5222065 = r5222063 * r5222064;
double r5222066 = r5222062 / r5222065;
double r5222067 = g;
double r5222068 = -r5222067;
double r5222069 = r5222067 * r5222067;
double r5222070 = h;
double r5222071 = r5222070 * r5222070;
double r5222072 = r5222069 - r5222071;
double r5222073 = sqrt(r5222072);
double r5222074 = r5222068 + r5222073;
double r5222075 = r5222066 * r5222074;
double r5222076 = cbrt(r5222075);
double r5222077 = r5222068 - r5222073;
double r5222078 = r5222066 * r5222077;
double r5222079 = cbrt(r5222078);
double r5222080 = r5222076 + r5222079;
return r5222080;
}
double f(double g, double h, double a) {
double r5222081 = g;
double r5222082 = 2.1044730434263153e-162;
bool r5222083 = r5222081 <= r5222082;
double r5222084 = r5222081 * r5222081;
double r5222085 = h;
double r5222086 = r5222085 * r5222085;
double r5222087 = r5222084 - r5222086;
double r5222088 = sqrt(r5222087);
double r5222089 = r5222081 + r5222088;
double r5222090 = -0.5;
double r5222091 = a;
double r5222092 = r5222090 / r5222091;
double r5222093 = r5222089 * r5222092;
double r5222094 = cbrt(r5222093);
double r5222095 = -r5222081;
double r5222096 = r5222095 - r5222081;
double r5222097 = 2.0;
double r5222098 = r5222096 / r5222097;
double r5222099 = cbrt(r5222098);
double r5222100 = 1.0;
double r5222101 = r5222100 / r5222091;
double r5222102 = cbrt(r5222101);
double r5222103 = r5222099 * r5222102;
double r5222104 = r5222094 + r5222103;
double r5222105 = r5222090 * r5222089;
double r5222106 = cbrt(r5222105);
double r5222107 = cbrt(r5222091);
double r5222108 = r5222106 / r5222107;
double r5222109 = r5222081 - r5222081;
double r5222110 = r5222091 * r5222097;
double r5222111 = r5222109 / r5222110;
double r5222112 = cbrt(r5222111);
double r5222113 = r5222108 + r5222112;
double r5222114 = r5222083 ? r5222104 : r5222113;
return r5222114;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 2.1044730434263153e-162Initial program 35.4
Simplified35.4
rmApplied *-un-lft-identity35.4
Applied times-frac35.4
Applied cbrt-prod31.8
Taylor expanded around -inf 30.9
Simplified30.9
if 2.1044730434263153e-162 < g Initial program 34.2
Simplified34.2
rmApplied associate-*l/34.2
Applied cbrt-div31.0
Taylor expanded around inf 30.7
Final simplification30.8
herbie shell --seed 2019141 +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))))))))