\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.4401173585185467 \cdot 10^{-164}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \sqrt{g \cdot g - h \cdot h}} + \frac{\sqrt[3]{1 \cdot \frac{\left({g}^{2} - {g}^{2}\right) + {h}^{2}}{\sqrt{\left(g - h\right) \cdot \left(g + h\right)} - g}}}{\sqrt[3]{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - g\right)}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r137048 = 1.0;
double r137049 = 2.0;
double r137050 = a;
double r137051 = r137049 * r137050;
double r137052 = r137048 / r137051;
double r137053 = g;
double r137054 = -r137053;
double r137055 = r137053 * r137053;
double r137056 = h;
double r137057 = r137056 * r137056;
double r137058 = r137055 - r137057;
double r137059 = sqrt(r137058);
double r137060 = r137054 + r137059;
double r137061 = r137052 * r137060;
double r137062 = cbrt(r137061);
double r137063 = r137054 - r137059;
double r137064 = r137052 * r137063;
double r137065 = cbrt(r137064);
double r137066 = r137062 + r137065;
return r137066;
}
double f(double g, double h, double a) {
double r137067 = g;
double r137068 = -1.4401173585185467e-164;
bool r137069 = r137067 <= r137068;
double r137070 = 1.0;
double r137071 = 2.0;
double r137072 = a;
double r137073 = r137071 * r137072;
double r137074 = r137070 / r137073;
double r137075 = cbrt(r137074);
double r137076 = -r137067;
double r137077 = r137067 * r137067;
double r137078 = h;
double r137079 = r137078 * r137078;
double r137080 = r137077 - r137079;
double r137081 = sqrt(r137080);
double r137082 = r137076 + r137081;
double r137083 = cbrt(r137082);
double r137084 = r137075 * r137083;
double r137085 = 2.0;
double r137086 = pow(r137067, r137085);
double r137087 = r137086 - r137086;
double r137088 = pow(r137078, r137085);
double r137089 = r137087 + r137088;
double r137090 = r137067 - r137078;
double r137091 = r137067 + r137078;
double r137092 = r137090 * r137091;
double r137093 = sqrt(r137092);
double r137094 = r137093 - r137067;
double r137095 = r137089 / r137094;
double r137096 = r137070 * r137095;
double r137097 = cbrt(r137096);
double r137098 = cbrt(r137073);
double r137099 = r137097 / r137098;
double r137100 = r137084 + r137099;
double r137101 = r137074 * r137082;
double r137102 = cbrt(r137101);
double r137103 = r137076 - r137067;
double r137104 = r137070 * r137103;
double r137105 = cbrt(r137104);
double r137106 = r137105 / r137098;
double r137107 = r137102 + r137106;
double r137108 = r137069 ? r137100 : r137107;
return r137108;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.4401173585185467e-164Initial program 34.9
rmApplied associate-*l/34.9
Applied cbrt-div34.9
rmApplied cbrt-prod31.1
rmApplied difference-of-squares31.1
rmApplied flip--31.0
Simplified30.4
Simplified30.4
if -1.4401173585185467e-164 < g Initial program 36.3
rmApplied associate-*l/36.3
Applied cbrt-div32.4
Taylor expanded around inf 31.1
Final simplification30.8
herbie shell --seed 2020034
(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))))))))