\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 -3.32375082481898832441063963780814386474 \cdot 10^{-157}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \left(\sqrt[3]{\sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h}}\right) + \left(-g\right)} + \sqrt[3]{\left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right) \cdot \frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}} + \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 r7244231 = 1.0;
double r7244232 = 2.0;
double r7244233 = a;
double r7244234 = r7244232 * r7244233;
double r7244235 = r7244231 / r7244234;
double r7244236 = g;
double r7244237 = -r7244236;
double r7244238 = r7244236 * r7244236;
double r7244239 = h;
double r7244240 = r7244239 * r7244239;
double r7244241 = r7244238 - r7244240;
double r7244242 = sqrt(r7244241);
double r7244243 = r7244237 + r7244242;
double r7244244 = r7244235 * r7244243;
double r7244245 = cbrt(r7244244);
double r7244246 = r7244237 - r7244242;
double r7244247 = r7244235 * r7244246;
double r7244248 = cbrt(r7244247);
double r7244249 = r7244245 + r7244248;
return r7244249;
}
double f(double g, double h, double a) {
double r7244250 = g;
double r7244251 = -3.3237508248189883e-157;
bool r7244252 = r7244250 <= r7244251;
double r7244253 = 1.0;
double r7244254 = 2.0;
double r7244255 = a;
double r7244256 = r7244254 * r7244255;
double r7244257 = r7244253 / r7244256;
double r7244258 = cbrt(r7244257);
double r7244259 = r7244250 * r7244250;
double r7244260 = h;
double r7244261 = r7244260 * r7244260;
double r7244262 = r7244259 - r7244261;
double r7244263 = sqrt(r7244262);
double r7244264 = cbrt(r7244263);
double r7244265 = r7244264 * r7244264;
double r7244266 = r7244264 * r7244265;
double r7244267 = -r7244250;
double r7244268 = r7244266 + r7244267;
double r7244269 = cbrt(r7244268);
double r7244270 = r7244258 * r7244269;
double r7244271 = r7244267 - r7244263;
double r7244272 = r7244271 * r7244257;
double r7244273 = cbrt(r7244272);
double r7244274 = r7244270 + r7244273;
double r7244275 = r7244263 + r7244267;
double r7244276 = r7244275 * r7244257;
double r7244277 = cbrt(r7244276);
double r7244278 = r7244267 - r7244250;
double r7244279 = cbrt(r7244278);
double r7244280 = r7244258 * r7244279;
double r7244281 = r7244277 + r7244280;
double r7244282 = r7244252 ? r7244274 : r7244281;
return r7244282;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -3.3237508248189883e-157Initial program 34.5
rmApplied cbrt-prod30.8
rmApplied add-cube-cbrt30.8
if -3.3237508248189883e-157 < g Initial program 36.3
rmApplied cbrt-prod32.1
Taylor expanded around inf 31.0
Final simplification30.9
herbie shell --seed 2019172
(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))))))))