double f(double g, double h, double a) {
double r24719845 = 1.0;
double r24719846 = 2.0;
double r24719847 = a;
double r24719848 = r24719846 * r24719847;
double r24719849 = r24719845 / r24719848;
double r24719850 = g;
double r24719851 = -r24719850;
double r24719852 = r24719850 * r24719850;
double r24719853 = h;
double r24719854 = r24719853 * r24719853;
double r24719855 = r24719852 - r24719854;
double r24719856 = sqrt(r24719855);
double r24719857 = r24719851 + r24719856;
double r24719858 = r24719849 * r24719857;
double r24719859 = cbrt(r24719858);
double r24719860 = r24719851 - r24719856;
double r24719861 = r24719849 * r24719860;
double r24719862 = cbrt(r24719861);
double r24719863 = r24719859 + r24719862;
return r24719863;
}
double f(double g, double h, double a) {
double r24719864 = g;
double r24719865 = -3.2849414813215076e-182;
bool r24719866 = r24719864 <= r24719865;
double r24719867 = r24719864 * r24719864;
double r24719868 = h;
double r24719869 = r24719868 * r24719868;
double r24719870 = r24719867 - r24719869;
double r24719871 = sqrt(r24719870);
double r24719872 = r24719871 - r24719864;
double r24719873 = cbrt(r24719872);
double r24719874 = a;
double r24719875 = 2.0;
double r24719876 = r24719874 * r24719875;
double r24719877 = cbrt(r24719876);
double r24719878 = r24719873 / r24719877;
double r24719879 = -0.5;
double r24719880 = r24719879 / r24719874;
double r24719881 = -r24719864;
double r24719882 = r24719881 + r24719864;
double r24719883 = r24719880 * r24719882;
double r24719884 = cbrt(r24719883);
double r24719885 = r24719878 + r24719884;
double r24719886 = r24719864 + r24719864;
double r24719887 = r24719879 * r24719886;
double r24719888 = cbrt(r24719887);
double r24719889 = cbrt(r24719874);
double r24719890 = r24719888 / r24719889;
double r24719891 = r24719872 / r24719876;
double r24719892 = cbrt(r24719891);
double r24719893 = r24719890 + r24719892;
double r24719894 = r24719866 ? r24719885 : r24719893;
return r24719894;
}
\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 -3.2849414813215076 \cdot 10^{-182}:\\
\;\;\;\;\frac{\sqrt[3]{\sqrt{g \cdot g - h \cdot h} - g}}{\sqrt[3]{a \cdot 2}} + \sqrt[3]{\frac{\frac{-1}{2}}{a} \cdot \left(\left(-g\right) + g\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\sqrt[3]{\frac{-1}{2} \cdot \left(g + g\right)}}{\sqrt[3]{a}} + \sqrt[3]{\frac{\sqrt{g \cdot g - h \cdot h} - g}{a \cdot 2}}\\
\end{array}


Bits error versus g



Bits error versus h



Bits error versus a
if g < -3.2849414813215076e-182Initial program 35.0
Simplified35.0
rmApplied cbrt-div31.8
Taylor expanded around -inf 31.5
Simplified31.5
if -3.2849414813215076e-182 < g Initial program 35.5
Simplified35.5
rmApplied associate-*l/35.5
Applied cbrt-div32.1
Taylor expanded around inf 31.5
Final simplification31.5
herbie shell --seed 2019101 +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))))))))