\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 4.732713041008813 \cdot 10^{-185}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{-\left(g + g\right)} \cdot \sqrt[3]{\frac{1}{2 \cdot a}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\left(-g\right) - \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)}}{\sqrt[3]{2 \cdot a}} + \sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r5095124 = 1.0;
double r5095125 = 2.0;
double r5095126 = a;
double r5095127 = r5095125 * r5095126;
double r5095128 = r5095124 / r5095127;
double r5095129 = g;
double r5095130 = -r5095129;
double r5095131 = r5095129 * r5095129;
double r5095132 = h;
double r5095133 = r5095132 * r5095132;
double r5095134 = r5095131 - r5095133;
double r5095135 = sqrt(r5095134);
double r5095136 = r5095130 + r5095135;
double r5095137 = r5095128 * r5095136;
double r5095138 = cbrt(r5095137);
double r5095139 = r5095130 - r5095135;
double r5095140 = r5095128 * r5095139;
double r5095141 = cbrt(r5095140);
double r5095142 = r5095138 + r5095141;
return r5095142;
}
double f(double g, double h, double a) {
double r5095143 = g;
double r5095144 = 4.732713041008813e-185;
bool r5095145 = r5095143 <= r5095144;
double r5095146 = 1.0;
double r5095147 = 2.0;
double r5095148 = a;
double r5095149 = r5095147 * r5095148;
double r5095150 = r5095146 / r5095149;
double r5095151 = -r5095143;
double r5095152 = r5095143 * r5095143;
double r5095153 = h;
double r5095154 = r5095153 * r5095153;
double r5095155 = r5095152 - r5095154;
double r5095156 = sqrt(r5095155);
double r5095157 = r5095151 - r5095156;
double r5095158 = r5095150 * r5095157;
double r5095159 = cbrt(r5095158);
double r5095160 = r5095143 + r5095143;
double r5095161 = -r5095160;
double r5095162 = cbrt(r5095161);
double r5095163 = cbrt(r5095150);
double r5095164 = r5095162 * r5095163;
double r5095165 = r5095159 + r5095164;
double r5095166 = cbrt(r5095156);
double r5095167 = r5095166 * r5095166;
double r5095168 = r5095166 * r5095167;
double r5095169 = r5095151 - r5095168;
double r5095170 = cbrt(r5095169);
double r5095171 = cbrt(r5095149);
double r5095172 = r5095170 / r5095171;
double r5095173 = r5095156 + r5095151;
double r5095174 = r5095173 * r5095150;
double r5095175 = cbrt(r5095174);
double r5095176 = r5095172 + r5095175;
double r5095177 = r5095145 ? r5095165 : r5095176;
return r5095177;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 4.732713041008813e-185Initial program 35.9
rmApplied cbrt-prod32.2
Taylor expanded around -inf 31.7
Simplified31.7
if 4.732713041008813e-185 < g Initial program 34.6
rmApplied associate-*l/34.6
Applied cbrt-div30.7
rmApplied add-cube-cbrt30.7
Final simplification31.2
herbie shell --seed 2019129
(FPCore (g h a)
:name "2-ancestry mixing, positive discriminant"
(+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))