\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 r156231 = 1.0;
double r156232 = 2.0;
double r156233 = a;
double r156234 = r156232 * r156233;
double r156235 = r156231 / r156234;
double r156236 = g;
double r156237 = -r156236;
double r156238 = r156236 * r156236;
double r156239 = h;
double r156240 = r156239 * r156239;
double r156241 = r156238 - r156240;
double r156242 = sqrt(r156241);
double r156243 = r156237 + r156242;
double r156244 = r156235 * r156243;
double r156245 = cbrt(r156244);
double r156246 = r156237 - r156242;
double r156247 = r156235 * r156246;
double r156248 = cbrt(r156247);
double r156249 = r156245 + r156248;
return r156249;
}
double f(double g, double h, double a) {
double r156250 = g;
double r156251 = -8.030232010219059e-161;
bool r156252 = r156250 <= r156251;
double r156253 = 1.0;
double r156254 = 2.0;
double r156255 = a;
double r156256 = r156254 * r156255;
double r156257 = r156253 / r156256;
double r156258 = cbrt(r156257);
double r156259 = -r156250;
double r156260 = r156250 * r156250;
double r156261 = h;
double r156262 = r156261 * r156261;
double r156263 = r156260 - r156262;
double r156264 = cbrt(r156263);
double r156265 = fabs(r156264);
double r156266 = sqrt(r156264);
double r156267 = r156265 * r156266;
double r156268 = r156259 + r156267;
double r156269 = cbrt(r156268);
double r156270 = r156258 * r156269;
double r156271 = sqrt(r156263);
double r156272 = r156259 - r156271;
double r156273 = cbrt(r156272);
double r156274 = r156258 * r156273;
double r156275 = r156270 + r156274;
double r156276 = r156259 + r156271;
double r156277 = r156257 * r156276;
double r156278 = cbrt(r156277);
double r156279 = r156259 - r156250;
double r156280 = cbrt(r156279);
double r156281 = r156258 * r156280;
double r156282 = r156278 + r156281;
double r156283 = r156252 ? r156275 : r156282;
return r156283;
}



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
(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))))))))