\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.03023201021905877 \cdot 10^{-161}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \left|\sqrt[3]{g \cdot g - h \cdot h}\right| \cdot \sqrt{\sqrt[3]{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}\\
\mathbf{else}:\\
\;\;\;\;\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 \sqrt[3]{\left(-g\right) - g}\\
\end{array}double f(double g, double h, double a) {
double r173228 = 1.0;
double r173229 = 2.0;
double r173230 = a;
double r173231 = r173229 * r173230;
double r173232 = r173228 / r173231;
double r173233 = g;
double r173234 = -r173233;
double r173235 = r173233 * r173233;
double r173236 = h;
double r173237 = r173236 * r173236;
double r173238 = r173235 - r173237;
double r173239 = sqrt(r173238);
double r173240 = r173234 + r173239;
double r173241 = r173232 * r173240;
double r173242 = cbrt(r173241);
double r173243 = r173234 - r173239;
double r173244 = r173232 * r173243;
double r173245 = cbrt(r173244);
double r173246 = r173242 + r173245;
return r173246;
}
double f(double g, double h, double a) {
double r173247 = g;
double r173248 = -8.030232010219059e-161;
bool r173249 = r173247 <= r173248;
double r173250 = 1.0;
double r173251 = 2.0;
double r173252 = a;
double r173253 = r173251 * r173252;
double r173254 = r173250 / r173253;
double r173255 = cbrt(r173254);
double r173256 = -r173247;
double r173257 = r173247 * r173247;
double r173258 = h;
double r173259 = r173258 * r173258;
double r173260 = r173257 - r173259;
double r173261 = cbrt(r173260);
double r173262 = fabs(r173261);
double r173263 = sqrt(r173261);
double r173264 = r173262 * r173263;
double r173265 = r173256 + r173264;
double r173266 = cbrt(r173265);
double r173267 = r173255 * r173266;
double r173268 = sqrt(r173260);
double r173269 = r173256 - r173268;
double r173270 = cbrt(r173269);
double r173271 = r173255 * r173270;
double r173272 = r173267 + r173271;
double r173273 = r173256 + r173268;
double r173274 = r173254 * r173273;
double r173275 = cbrt(r173274);
double r173276 = r173256 - r173247;
double r173277 = cbrt(r173276);
double r173278 = r173255 * r173277;
double r173279 = r173275 + r173278;
double r173280 = r173249 ? r173272 : r173279;
return r173280;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -8.030232010219059e-161Initial program 34.4
rmApplied cbrt-prod34.4
rmApplied cbrt-prod31.0
rmApplied add-cube-cbrt31.1
Applied sqrt-prod31.1
Simplified31.1
if -8.030232010219059e-161 < g Initial program 37.4
rmApplied cbrt-prod33.3
Taylor expanded around inf 32.1
Final simplification31.6
herbie shell --seed 2020057 +o rules:numerics
(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))))))))