\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)}\frac{\sqrt[3]{1 \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{1 \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}}{\sqrt[3]{2 \cdot a}}double f(double g, double h, double a) {
double r156300 = 1.0;
double r156301 = 2.0;
double r156302 = a;
double r156303 = r156301 * r156302;
double r156304 = r156300 / r156303;
double r156305 = g;
double r156306 = -r156305;
double r156307 = r156305 * r156305;
double r156308 = h;
double r156309 = r156308 * r156308;
double r156310 = r156307 - r156309;
double r156311 = sqrt(r156310);
double r156312 = r156306 + r156311;
double r156313 = r156304 * r156312;
double r156314 = cbrt(r156313);
double r156315 = r156306 - r156311;
double r156316 = r156304 * r156315;
double r156317 = cbrt(r156316);
double r156318 = r156314 + r156317;
return r156318;
}
double f(double g, double h, double a) {
double r156319 = 1.0;
double r156320 = g;
double r156321 = r156320 * r156320;
double r156322 = h;
double r156323 = r156322 * r156322;
double r156324 = r156321 - r156323;
double r156325 = sqrt(r156324);
double r156326 = r156325 - r156320;
double r156327 = r156319 * r156326;
double r156328 = cbrt(r156327);
double r156329 = 2.0;
double r156330 = a;
double r156331 = r156329 * r156330;
double r156332 = cbrt(r156331);
double r156333 = r156328 / r156332;
double r156334 = -r156320;
double r156335 = r156334 - r156325;
double r156336 = r156319 * r156335;
double r156337 = cbrt(r156336);
double r156338 = r156337 / r156332;
double r156339 = r156333 + r156338;
return r156339;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
Initial program 36.4
Simplified36.4
rmApplied associate-*l/36.4
Applied cbrt-div34.2
rmApplied associate-*l/34.2
Applied cbrt-div32.3
Final simplification32.3
herbie shell --seed 2019323 +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))))))))