\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 -1.6297615549700884 \cdot 10^{-171}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{1}{2} \cdot \left(\sqrt{g \cdot g - h \cdot h} - g\right)}}{\sqrt[3]{a}} + \frac{\sqrt[3]{\frac{-1}{2} \cdot \left(\left(-g\right) + g\right)}}{\sqrt[3]{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{g - g}{a} \cdot \frac{1}{2}} + \sqrt[3]{g + \sqrt{g \cdot g - h \cdot h}} \cdot \sqrt[3]{\frac{\frac{-1}{2}}{a}}\\
\end{array}double f(double g, double h, double a) {
double r4274013 = 1.0;
double r4274014 = 2.0;
double r4274015 = a;
double r4274016 = r4274014 * r4274015;
double r4274017 = r4274013 / r4274016;
double r4274018 = g;
double r4274019 = -r4274018;
double r4274020 = r4274018 * r4274018;
double r4274021 = h;
double r4274022 = r4274021 * r4274021;
double r4274023 = r4274020 - r4274022;
double r4274024 = sqrt(r4274023);
double r4274025 = r4274019 + r4274024;
double r4274026 = r4274017 * r4274025;
double r4274027 = cbrt(r4274026);
double r4274028 = r4274019 - r4274024;
double r4274029 = r4274017 * r4274028;
double r4274030 = cbrt(r4274029);
double r4274031 = r4274027 + r4274030;
return r4274031;
}
double f(double g, double h, double a) {
double r4274032 = g;
double r4274033 = -1.6297615549700884e-171;
bool r4274034 = r4274032 <= r4274033;
double r4274035 = 0.5;
double r4274036 = r4274032 * r4274032;
double r4274037 = h;
double r4274038 = r4274037 * r4274037;
double r4274039 = r4274036 - r4274038;
double r4274040 = sqrt(r4274039);
double r4274041 = r4274040 - r4274032;
double r4274042 = r4274035 * r4274041;
double r4274043 = cbrt(r4274042);
double r4274044 = a;
double r4274045 = cbrt(r4274044);
double r4274046 = r4274043 / r4274045;
double r4274047 = -0.5;
double r4274048 = -r4274032;
double r4274049 = r4274048 + r4274032;
double r4274050 = r4274047 * r4274049;
double r4274051 = cbrt(r4274050);
double r4274052 = r4274051 / r4274045;
double r4274053 = r4274046 + r4274052;
double r4274054 = r4274032 - r4274032;
double r4274055 = r4274054 / r4274044;
double r4274056 = r4274055 * r4274035;
double r4274057 = cbrt(r4274056);
double r4274058 = r4274032 + r4274040;
double r4274059 = cbrt(r4274058);
double r4274060 = r4274047 / r4274044;
double r4274061 = cbrt(r4274060);
double r4274062 = r4274059 * r4274061;
double r4274063 = r4274057 + r4274062;
double r4274064 = r4274034 ? r4274053 : r4274063;
return r4274064;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.6297615549700884e-171Initial program 33.9
Simplified33.9
rmApplied associate-*l/33.9
Applied cbrt-div33.9
rmApplied associate-*l/33.9
Applied cbrt-div30.4
Taylor expanded around -inf 30.2
Simplified30.2
if -1.6297615549700884e-171 < g Initial program 36.4
Simplified36.4
rmApplied cbrt-prod32.9
Taylor expanded around inf 32.6
Final simplification31.5
herbie shell --seed 2019151 +o rules:numerics
(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))))))))