\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.5530414921382858 \cdot 10^{-162}:\\
\;\;\;\;\sqrt[3]{\frac{\left(-g\right) - \left(-g\right)}{a \cdot 2}} + \sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{2}} \cdot \sqrt[3]{\frac{1}{a}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{a \cdot 2}} + \frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{a \cdot 2}}\\
\end{array}double f(double g, double h, double a) {
double r4419080 = 1.0;
double r4419081 = 2.0;
double r4419082 = a;
double r4419083 = r4419081 * r4419082;
double r4419084 = r4419080 / r4419083;
double r4419085 = g;
double r4419086 = -r4419085;
double r4419087 = r4419085 * r4419085;
double r4419088 = h;
double r4419089 = r4419088 * r4419088;
double r4419090 = r4419087 - r4419089;
double r4419091 = sqrt(r4419090);
double r4419092 = r4419086 + r4419091;
double r4419093 = r4419084 * r4419092;
double r4419094 = cbrt(r4419093);
double r4419095 = r4419086 - r4419091;
double r4419096 = r4419084 * r4419095;
double r4419097 = cbrt(r4419096);
double r4419098 = r4419094 + r4419097;
return r4419098;
}
double f(double g, double h, double a) {
double r4419099 = g;
double r4419100 = 1.5530414921382858e-162;
bool r4419101 = r4419099 <= r4419100;
double r4419102 = -r4419099;
double r4419103 = r4419102 - r4419102;
double r4419104 = a;
double r4419105 = 2.0;
double r4419106 = r4419104 * r4419105;
double r4419107 = r4419103 / r4419106;
double r4419108 = cbrt(r4419107);
double r4419109 = r4419099 * r4419099;
double r4419110 = h;
double r4419111 = r4419110 * r4419110;
double r4419112 = r4419109 - r4419111;
double r4419113 = sqrt(r4419112);
double r4419114 = r4419113 - r4419099;
double r4419115 = r4419114 / r4419105;
double r4419116 = cbrt(r4419115);
double r4419117 = 1.0;
double r4419118 = r4419117 / r4419104;
double r4419119 = cbrt(r4419118);
double r4419120 = r4419116 * r4419119;
double r4419121 = r4419108 + r4419120;
double r4419122 = r4419114 / r4419106;
double r4419123 = cbrt(r4419122);
double r4419124 = r4419102 - r4419113;
double r4419125 = cbrt(r4419124);
double r4419126 = cbrt(r4419106);
double r4419127 = r4419125 / r4419126;
double r4419128 = r4419123 + r4419127;
double r4419129 = r4419101 ? r4419121 : r4419128;
return r4419129;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.5530414921382858e-162Initial program 35.3
Simplified35.3
rmApplied *-un-lft-identity35.3
Applied *-un-lft-identity35.3
Applied distribute-lft-out--35.3
Applied times-frac35.3
Applied cbrt-prod31.5
Taylor expanded around -inf 31.3
Simplified31.3
if 1.5530414921382858e-162 < g Initial program 34.2
Simplified34.2
rmApplied cbrt-div30.6
Final simplification31.0
herbie shell --seed 2019134 +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))))))))