\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}\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} \le -6.169963939162089 \cdot 10^{-80}:\\
\;\;\;\;\left(\sqrt[3]{\frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\frac{\sqrt[3]{\sqrt[3]{a}}}{\sqrt{\frac{1}{2}}}}} \cdot \sqrt[3]{\left(\frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{\sqrt[3]{a}}} \cdot \sqrt{\frac{1}{2}}\right) \cdot \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{\sqrt[3]{a}}}}\right) \cdot \sqrt[3]{\frac{1}{\sqrt[3]{a} \cdot \sqrt[3]{a}}} + \sqrt[3]{\frac{1}{\frac{a}{\frac{1}{2}}}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}\\
\mathbf{elif}\;\sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{a \cdot 2} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)} \le 0.0:\\
\;\;\;\;\sqrt[3]{\frac{1}{\frac{a}{\frac{1}{2}}}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\frac{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}{\frac{a}{\frac{1}{2}}}}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\frac{\sqrt[3]{\sqrt[3]{a}}}{\sqrt{\frac{1}{2}}}}} \cdot \sqrt[3]{\left(\frac{\sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}{\sqrt[3]{\sqrt[3]{a}}} \cdot \sqrt{\frac{1}{2}}\right) \cdot \frac{\sqrt[3]{\left(-g\right) - g}}{\sqrt[3]{\sqrt[3]{a}}}}\right) \cdot \sqrt[3]{\frac{1}{\sqrt[3]{a} \cdot \sqrt[3]{a}}} + \sqrt[3]{\frac{1}{\frac{a}{\frac{1}{2}}}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}\\
\end{array}double f(double g, double h, double a) {
double r14688760 = 1.0;
double r14688761 = 2.0;
double r14688762 = a;
double r14688763 = r14688761 * r14688762;
double r14688764 = r14688760 / r14688763;
double r14688765 = g;
double r14688766 = -r14688765;
double r14688767 = r14688765 * r14688765;
double r14688768 = h;
double r14688769 = r14688768 * r14688768;
double r14688770 = r14688767 - r14688769;
double r14688771 = sqrt(r14688770);
double r14688772 = r14688766 + r14688771;
double r14688773 = r14688764 * r14688772;
double r14688774 = cbrt(r14688773);
double r14688775 = r14688766 - r14688771;
double r14688776 = r14688764 * r14688775;
double r14688777 = cbrt(r14688776);
double r14688778 = r14688774 + r14688777;
return r14688778;
}
double f(double g, double h, double a) {
double r14688779 = 1.0;
double r14688780 = a;
double r14688781 = 2.0;
double r14688782 = r14688780 * r14688781;
double r14688783 = r14688779 / r14688782;
double r14688784 = g;
double r14688785 = -r14688784;
double r14688786 = r14688784 * r14688784;
double r14688787 = h;
double r14688788 = r14688787 * r14688787;
double r14688789 = r14688786 - r14688788;
double r14688790 = sqrt(r14688789);
double r14688791 = r14688785 + r14688790;
double r14688792 = r14688783 * r14688791;
double r14688793 = cbrt(r14688792);
double r14688794 = r14688785 - r14688790;
double r14688795 = r14688783 * r14688794;
double r14688796 = cbrt(r14688795);
double r14688797 = r14688793 + r14688796;
double r14688798 = -6.169963939162089e-80;
bool r14688799 = r14688797 <= r14688798;
double r14688800 = cbrt(r14688794);
double r14688801 = cbrt(r14688780);
double r14688802 = cbrt(r14688801);
double r14688803 = 0.5;
double r14688804 = sqrt(r14688803);
double r14688805 = r14688802 / r14688804;
double r14688806 = r14688800 / r14688805;
double r14688807 = cbrt(r14688806);
double r14688808 = r14688800 / r14688802;
double r14688809 = r14688808 * r14688804;
double r14688810 = r14688785 - r14688784;
double r14688811 = cbrt(r14688810);
double r14688812 = r14688811 / r14688802;
double r14688813 = r14688809 * r14688812;
double r14688814 = cbrt(r14688813);
double r14688815 = r14688807 * r14688814;
double r14688816 = r14688801 * r14688801;
double r14688817 = r14688779 / r14688816;
double r14688818 = cbrt(r14688817);
double r14688819 = r14688815 * r14688818;
double r14688820 = r14688780 / r14688803;
double r14688821 = r14688779 / r14688820;
double r14688822 = cbrt(r14688821);
double r14688823 = r14688790 - r14688784;
double r14688824 = cbrt(r14688823);
double r14688825 = r14688822 * r14688824;
double r14688826 = r14688819 + r14688825;
double r14688827 = 0.0;
bool r14688828 = r14688797 <= r14688827;
double r14688829 = r14688822 * r14688811;
double r14688830 = r14688794 / r14688820;
double r14688831 = cbrt(r14688830);
double r14688832 = r14688829 + r14688831;
double r14688833 = r14688828 ? r14688832 : r14688826;
double r14688834 = r14688799 ? r14688826 : r14688833;
return r14688834;
}



Bits error versus g



Bits error versus h



Bits error versus a
Results
if (+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))) < -6.169963939162089e-80 or 0.0 < (+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))) Initial program 34.5
Simplified34.5
rmApplied div-inv34.5
Applied cbrt-prod33.3
rmApplied *-un-lft-identity33.3
Applied add-cube-cbrt33.4
Applied times-frac33.4
Applied *-un-lft-identity33.4
Applied times-frac33.4
Applied cbrt-prod32.2
Simplified32.2
rmApplied add-sqr-sqrt32.2
Applied add-cube-cbrt32.2
Applied times-frac32.2
Applied add-cube-cbrt32.2
Applied times-frac32.2
Applied cbrt-prod32.3
Simplified32.3
Taylor expanded around inf 32.3
if -6.169963939162089e-80 < (+ (cbrt (* (/ 1 (* 2 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1 (* 2 a)) (- (- g) (sqrt (- (* g g) (* h h))))))) < 0.0Initial program 44.9
Simplified44.9
rmApplied div-inv44.9
Applied cbrt-prod32.5
Taylor expanded around -inf 17.0
Simplified17.0
Final simplification31.4
herbie shell --seed 2019112
(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))))))))