\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 r6733028 = 1.0;
double r6733029 = 2.0;
double r6733030 = a;
double r6733031 = r6733029 * r6733030;
double r6733032 = r6733028 / r6733031;
double r6733033 = g;
double r6733034 = -r6733033;
double r6733035 = r6733033 * r6733033;
double r6733036 = h;
double r6733037 = r6733036 * r6733036;
double r6733038 = r6733035 - r6733037;
double r6733039 = sqrt(r6733038);
double r6733040 = r6733034 + r6733039;
double r6733041 = r6733032 * r6733040;
double r6733042 = cbrt(r6733041);
double r6733043 = r6733034 - r6733039;
double r6733044 = r6733032 * r6733043;
double r6733045 = cbrt(r6733044);
double r6733046 = r6733042 + r6733045;
return r6733046;
}
double f(double g, double h, double a) {
double r6733047 = g;
double r6733048 = -3.3237508248189883e-157;
bool r6733049 = r6733047 <= r6733048;
double r6733050 = 1.0;
double r6733051 = 2.0;
double r6733052 = a;
double r6733053 = r6733051 * r6733052;
double r6733054 = r6733050 / r6733053;
double r6733055 = cbrt(r6733054);
double r6733056 = r6733047 * r6733047;
double r6733057 = h;
double r6733058 = r6733057 * r6733057;
double r6733059 = r6733056 - r6733058;
double r6733060 = sqrt(r6733059);
double r6733061 = cbrt(r6733060);
double r6733062 = r6733061 * r6733061;
double r6733063 = r6733061 * r6733062;
double r6733064 = -r6733047;
double r6733065 = r6733063 + r6733064;
double r6733066 = cbrt(r6733065);
double r6733067 = r6733055 * r6733066;
double r6733068 = r6733064 - r6733060;
double r6733069 = r6733068 * r6733054;
double r6733070 = cbrt(r6733069);
double r6733071 = r6733067 + r6733070;
double r6733072 = r6733060 + r6733064;
double r6733073 = r6733072 * r6733054;
double r6733074 = cbrt(r6733073);
double r6733075 = r6733064 - r6733047;
double r6733076 = cbrt(r6733075);
double r6733077 = r6733055 * r6733076;
double r6733078 = r6733074 + r6733077;
double r6733079 = r6733049 ? r6733071 : r6733078;
return r6733079;
}



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