\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.820567991238995 \cdot 10^{-157}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} + \frac{\sqrt[3]{-\frac{g + g}{\sqrt{2}}}}{\sqrt[3]{a \cdot \sqrt{2}}}\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right)} + \frac{\sqrt[3]{\frac{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}{\sqrt{2}}}}{\sqrt[3]{a \cdot \sqrt{2}}}\\
\end{array}double f(double g, double h, double a) {
double r6174633 = 1.0;
double r6174634 = 2.0;
double r6174635 = a;
double r6174636 = r6174634 * r6174635;
double r6174637 = r6174633 / r6174636;
double r6174638 = g;
double r6174639 = -r6174638;
double r6174640 = r6174638 * r6174638;
double r6174641 = h;
double r6174642 = r6174641 * r6174641;
double r6174643 = r6174640 - r6174642;
double r6174644 = sqrt(r6174643);
double r6174645 = r6174639 + r6174644;
double r6174646 = r6174637 * r6174645;
double r6174647 = cbrt(r6174646);
double r6174648 = r6174639 - r6174644;
double r6174649 = r6174637 * r6174648;
double r6174650 = cbrt(r6174649);
double r6174651 = r6174647 + r6174650;
return r6174651;
}
double f(double g, double h, double a) {
double r6174652 = g;
double r6174653 = 1.820567991238995e-157;
bool r6174654 = r6174652 <= r6174653;
double r6174655 = 1.0;
double r6174656 = a;
double r6174657 = 2.0;
double r6174658 = r6174656 * r6174657;
double r6174659 = r6174655 / r6174658;
double r6174660 = -r6174652;
double r6174661 = r6174652 * r6174652;
double r6174662 = h;
double r6174663 = r6174662 * r6174662;
double r6174664 = r6174661 - r6174663;
double r6174665 = sqrt(r6174664);
double r6174666 = r6174660 - r6174665;
double r6174667 = r6174659 * r6174666;
double r6174668 = cbrt(r6174667);
double r6174669 = r6174652 + r6174652;
double r6174670 = sqrt(r6174657);
double r6174671 = r6174669 / r6174670;
double r6174672 = -r6174671;
double r6174673 = cbrt(r6174672);
double r6174674 = r6174656 * r6174670;
double r6174675 = cbrt(r6174674);
double r6174676 = r6174673 / r6174675;
double r6174677 = r6174668 + r6174676;
double r6174678 = r6174665 + r6174660;
double r6174679 = r6174659 * r6174678;
double r6174680 = cbrt(r6174679);
double r6174681 = r6174666 / r6174670;
double r6174682 = cbrt(r6174681);
double r6174683 = r6174682 / r6174675;
double r6174684 = r6174680 + r6174683;
double r6174685 = r6174654 ? r6174677 : r6174684;
return r6174685;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if g < 1.820567991238995e-157Initial program 35.6
rmApplied add-sqr-sqrt35.7
Applied associate-*l*35.7
Applied associate-/r*35.6
Applied associate-*l/35.6
Applied cbrt-div31.8
Simplified31.8
Taylor expanded around -inf 30.9
Simplified30.9
if 1.820567991238995e-157 < g Initial program 33.4
rmApplied add-sqr-sqrt33.5
Applied associate-*l*33.5
Applied associate-/r*33.5
Applied associate-*l/33.4
Applied cbrt-div29.8
Simplified29.8
Final simplification30.4
herbie shell --seed 2019158 +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))))))))