\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 r6236073 = 1.0;
double r6236074 = 2.0;
double r6236075 = a;
double r6236076 = r6236074 * r6236075;
double r6236077 = r6236073 / r6236076;
double r6236078 = g;
double r6236079 = -r6236078;
double r6236080 = r6236078 * r6236078;
double r6236081 = h;
double r6236082 = r6236081 * r6236081;
double r6236083 = r6236080 - r6236082;
double r6236084 = sqrt(r6236083);
double r6236085 = r6236079 + r6236084;
double r6236086 = r6236077 * r6236085;
double r6236087 = cbrt(r6236086);
double r6236088 = r6236079 - r6236084;
double r6236089 = r6236077 * r6236088;
double r6236090 = cbrt(r6236089);
double r6236091 = r6236087 + r6236090;
return r6236091;
}
double f(double g, double h, double a) {
double r6236092 = g;
double r6236093 = -3.3237508248189883e-157;
bool r6236094 = r6236092 <= r6236093;
double r6236095 = 1.0;
double r6236096 = 2.0;
double r6236097 = a;
double r6236098 = r6236096 * r6236097;
double r6236099 = r6236095 / r6236098;
double r6236100 = cbrt(r6236099);
double r6236101 = r6236092 * r6236092;
double r6236102 = h;
double r6236103 = r6236102 * r6236102;
double r6236104 = r6236101 - r6236103;
double r6236105 = sqrt(r6236104);
double r6236106 = cbrt(r6236105);
double r6236107 = r6236106 * r6236106;
double r6236108 = r6236106 * r6236107;
double r6236109 = -r6236092;
double r6236110 = r6236108 + r6236109;
double r6236111 = cbrt(r6236110);
double r6236112 = r6236100 * r6236111;
double r6236113 = r6236109 - r6236105;
double r6236114 = r6236113 * r6236099;
double r6236115 = cbrt(r6236114);
double r6236116 = r6236112 + r6236115;
double r6236117 = r6236105 + r6236109;
double r6236118 = r6236117 * r6236099;
double r6236119 = cbrt(r6236118);
double r6236120 = r6236109 - r6236092;
double r6236121 = cbrt(r6236120);
double r6236122 = r6236100 * r6236121;
double r6236123 = r6236119 + r6236122;
double r6236124 = r6236094 ? r6236116 : r6236123;
return r6236124;
}



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