\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.593804505093948907167066401627398977 \cdot 10^{-179}:\\
\;\;\;\;\frac{\sqrt[3]{-1 \cdot \frac{h \cdot h}{g - \sqrt{\left(g - h\right) \cdot \left(h + g\right)}}}}{\sqrt[3]{2 \cdot a}} + \frac{\sqrt[3]{\sqrt{\left(g - h\right) \cdot \left(h + g\right)} - g}}{\sqrt[3]{a \cdot \frac{2}{1}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{\sqrt{\left(g - h\right) \cdot \left(h + g\right)} - g}{\frac{2}{\frac{1}{a}}}} + \frac{\sqrt[3]{\left(-\left(g + g\right)\right) \cdot 1}}{\sqrt[3]{2 \cdot a}}\\
\end{array}double f(double g, double h, double a) {
double r135099 = 1.0;
double r135100 = 2.0;
double r135101 = a;
double r135102 = r135100 * r135101;
double r135103 = r135099 / r135102;
double r135104 = g;
double r135105 = -r135104;
double r135106 = r135104 * r135104;
double r135107 = h;
double r135108 = r135107 * r135107;
double r135109 = r135106 - r135108;
double r135110 = sqrt(r135109);
double r135111 = r135105 + r135110;
double r135112 = r135103 * r135111;
double r135113 = cbrt(r135112);
double r135114 = r135105 - r135110;
double r135115 = r135103 * r135114;
double r135116 = cbrt(r135115);
double r135117 = r135113 + r135116;
return r135117;
}
double f(double g, double h, double a) {
double r135118 = g;
double r135119 = -1.593804505093949e-179;
bool r135120 = r135118 <= r135119;
double r135121 = 1.0;
double r135122 = h;
double r135123 = r135122 * r135122;
double r135124 = r135118 - r135122;
double r135125 = r135122 + r135118;
double r135126 = r135124 * r135125;
double r135127 = sqrt(r135126);
double r135128 = r135118 - r135127;
double r135129 = r135123 / r135128;
double r135130 = r135121 * r135129;
double r135131 = -r135130;
double r135132 = cbrt(r135131);
double r135133 = 2.0;
double r135134 = a;
double r135135 = r135133 * r135134;
double r135136 = cbrt(r135135);
double r135137 = r135132 / r135136;
double r135138 = r135127 - r135118;
double r135139 = cbrt(r135138);
double r135140 = r135133 / r135121;
double r135141 = r135134 * r135140;
double r135142 = cbrt(r135141);
double r135143 = r135139 / r135142;
double r135144 = r135137 + r135143;
double r135145 = r135121 / r135134;
double r135146 = r135133 / r135145;
double r135147 = r135138 / r135146;
double r135148 = cbrt(r135147);
double r135149 = r135118 + r135118;
double r135150 = -r135149;
double r135151 = r135150 * r135121;
double r135152 = cbrt(r135151);
double r135153 = r135152 / r135136;
double r135154 = r135148 + r135153;
double r135155 = r135120 ? r135144 : r135154;
return r135155;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < -1.593804505093949e-179Initial program 35.4
Simplified35.4
rmApplied associate-*l/35.4
Applied cbrt-div35.3
Simplified35.3
Simplified35.3
rmApplied cbrt-div31.3
Simplified31.3
Simplified31.3
rmApplied flip-+31.2
Simplified30.6
Simplified30.6
if -1.593804505093949e-179 < g Initial program 37.3
Simplified37.3
rmApplied associate-*l/37.3
Applied cbrt-div33.7
Simplified33.7
Simplified33.7
Taylor expanded around 0 32.6
Final simplification31.6
herbie shell --seed 2019196
(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))))))))