\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 -8.483083017653631513010138080609923608314 \cdot 10^{-164}:\\
\;\;\;\;\frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{2 \cdot a}} + \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 \left(\sqrt{g \cdot g - h \cdot h} - g\right)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r143145 = 1.0;
double r143146 = 2.0;
double r143147 = a;
double r143148 = r143146 * r143147;
double r143149 = r143145 / r143148;
double r143150 = g;
double r143151 = -r143150;
double r143152 = r143150 * r143150;
double r143153 = h;
double r143154 = r143153 * r143153;
double r143155 = r143152 - r143154;
double r143156 = sqrt(r143155);
double r143157 = r143151 + r143156;
double r143158 = r143149 * r143157;
double r143159 = cbrt(r143158);
double r143160 = r143151 - r143156;
double r143161 = r143149 * r143160;
double r143162 = cbrt(r143161);
double r143163 = r143159 + r143162;
return r143163;
}
double f(double g, double h, double a) {
double r143164 = g;
double r143165 = -8.483083017653632e-164;
bool r143166 = r143164 <= r143165;
double r143167 = 1.0;
double r143168 = r143164 * r143164;
double r143169 = h;
double r143170 = r143169 * r143169;
double r143171 = r143168 - r143170;
double r143172 = sqrt(r143171);
double r143173 = r143172 - r143164;
double r143174 = r143167 * r143173;
double r143175 = cbrt(r143174);
double r143176 = 2.0;
double r143177 = a;
double r143178 = r143176 * r143177;
double r143179 = cbrt(r143178);
double r143180 = r143175 / r143179;
double r143181 = r143167 / r143178;
double r143182 = -r143164;
double r143183 = r143182 - r143172;
double r143184 = r143181 * r143183;
double r143185 = cbrt(r143184);
double r143186 = r143180 + r143185;
double r143187 = r143181 * r143173;
double r143188 = cbrt(r143187);
double r143189 = cbrt(r143181);
double r143190 = r143182 - r143164;
double r143191 = cbrt(r143190);
double r143192 = r143189 * r143191;
double r143193 = r143188 + r143192;
double r143194 = r143166 ? r143186 : r143193;
return r143194;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.483083017653632e-164Initial program 35.1
Simplified35.1
rmApplied associate-*l/35.1
Applied cbrt-div31.1
if -8.483083017653632e-164 < g Initial program 37.0
Simplified37.0
rmApplied cbrt-prod33.3
Taylor expanded around inf 32.2
Final simplification31.7
herbie shell --seed 2019208
(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))))))))