\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.019764828236680478073231038689567412102 \cdot 10^{-191}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + \left(-g\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(\left(-g\right) - g\right) \cdot 1}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r5828172 = 1.0;
double r5828173 = 2.0;
double r5828174 = a;
double r5828175 = r5828173 * r5828174;
double r5828176 = r5828172 / r5828175;
double r5828177 = g;
double r5828178 = -r5828177;
double r5828179 = r5828177 * r5828177;
double r5828180 = h;
double r5828181 = r5828180 * r5828180;
double r5828182 = r5828179 - r5828181;
double r5828183 = sqrt(r5828182);
double r5828184 = r5828178 + r5828183;
double r5828185 = r5828176 * r5828184;
double r5828186 = cbrt(r5828185);
double r5828187 = r5828178 - r5828183;
double r5828188 = r5828176 * r5828187;
double r5828189 = cbrt(r5828188);
double r5828190 = r5828186 + r5828189;
return r5828190;
}
double f(double g, double h, double a) {
double r5828191 = g;
double r5828192 = -1.0197648282366805e-191;
bool r5828193 = r5828191 <= r5828192;
double r5828194 = 1.0;
double r5828195 = 2.0;
double r5828196 = a;
double r5828197 = r5828195 * r5828196;
double r5828198 = r5828194 / r5828197;
double r5828199 = cbrt(r5828198);
double r5828200 = r5828191 * r5828191;
double r5828201 = h;
double r5828202 = r5828201 * r5828201;
double r5828203 = r5828200 - r5828202;
double r5828204 = sqrt(r5828203);
double r5828205 = -r5828191;
double r5828206 = r5828204 + r5828205;
double r5828207 = cbrt(r5828206);
double r5828208 = r5828199 * r5828207;
double r5828209 = r5828205 - r5828204;
double r5828210 = r5828198 * r5828209;
double r5828211 = cbrt(r5828210);
double r5828212 = r5828208 + r5828211;
double r5828213 = r5828205 - r5828191;
double r5828214 = r5828213 * r5828194;
double r5828215 = cbrt(r5828214);
double r5828216 = cbrt(r5828197);
double r5828217 = r5828215 / r5828216;
double r5828218 = r5828206 * r5828198;
double r5828219 = cbrt(r5828218);
double r5828220 = r5828217 + r5828219;
double r5828221 = r5828193 ? r5828212 : r5828220;
return r5828221;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.0197648282366805e-191Initial program 35.6
rmApplied cbrt-prod31.5
if -1.0197648282366805e-191 < g Initial program 37.5
rmApplied associate-*l/37.5
Applied cbrt-div33.7
Taylor expanded around inf 32.8
Final simplification32.2
herbie shell --seed 2019168 +o rules:numerics
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))