#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2-ancestry mixing, positive discriminant";

double f_if(float g, float h, float a) {
        float r26857 = 1;
        float r26858 = 2;
        float r26859 = a;
        float r26860 = r26858 * r26859;
        float r26861 = r26857 / r26860;
        float r26862 = g;
        float r26863 = -r26862;
        float r26864 = r26862 * r26862;
        float r26865 = h;
        float r26866 = r26865 * r26865;
        float r26867 = r26864 - r26866;
        float r26868 = sqrt(r26867);
        float r26869 = r26863 + r26868;
        float r26870 = r26861 * r26869;
        float r26871 = cbrt(r26870);
        float r26872 = r26863 - r26868;
        float r26873 = r26861 * r26872;
        float r26874 = cbrt(r26873);
        float r26875 = r26871 + r26874;
        return r26875;
}

double f_id(double g, double h, double a) {
        double r26876 = 1;
        double r26877 = 2;
        double r26878 = a;
        double r26879 = r26877 * r26878;
        double r26880 = r26876 / r26879;
        double r26881 = g;
        double r26882 = -r26881;
        double r26883 = r26881 * r26881;
        double r26884 = h;
        double r26885 = r26884 * r26884;
        double r26886 = r26883 - r26885;
        double r26887 = sqrt(r26886);
        double r26888 = r26882 + r26887;
        double r26889 = r26880 * r26888;
        double r26890 = cbrt(r26889);
        double r26891 = r26882 - r26887;
        double r26892 = r26880 * r26891;
        double r26893 = cbrt(r26892);
        double r26894 = r26890 + r26893;
        return r26894;
}


double f_of(float g, float h, float a) {
        float r26895 = g;
        float r26896 = -1.5760961644984926e-162;
        bool r26897 = r26895 <= r26896;
        float r26898 = 1;
        float r26899 = 2;
        float r26900 = a;
        float r26901 = r26899 * r26900;
        float r26902 = r26898 / r26901;
        float r26903 = -r26895;
        float r26904 = r26895 * r26895;
        float r26905 = h;
        float r26906 = r26905 * r26905;
        float r26907 = r26904 - r26906;
        float r26908 = sqrt(r26907);
        float r26909 = r26903 + r26908;
        float r26910 = r26902 * r26909;
        float r26911 = cbrt(r26910);
        float r26912 = r26908 - r26895;
        float r26913 = r26906 / r26912;
        float r26914 = r26902 * r26913;
        float r26915 = cbrt(r26914);
        float r26916 = r26911 + r26915;
        float r26917 = r26903 - r26908;
        float r26918 = r26906 / r26917;
        float r26919 = r26902 * r26918;
        float r26920 = cbrt(r26919);
        float r26921 = r26902 * r26917;
        float r26922 = cbrt(r26921);
        float r26923 = r26920 + r26922;
        float r26924 = r26897 ? r26916 : r26923;
        return r26924;
}

double f_od(double g, double h, double a) {
        double r26925 = g;
        double r26926 = -1.5760961644984926e-162;
        bool r26927 = r26925 <= r26926;
        double r26928 = 1;
        double r26929 = 2;
        double r26930 = a;
        double r26931 = r26929 * r26930;
        double r26932 = r26928 / r26931;
        double r26933 = -r26925;
        double r26934 = r26925 * r26925;
        double r26935 = h;
        double r26936 = r26935 * r26935;
        double r26937 = r26934 - r26936;
        double r26938 = sqrt(r26937);
        double r26939 = r26933 + r26938;
        double r26940 = r26932 * r26939;
        double r26941 = cbrt(r26940);
        double r26942 = r26938 - r26925;
        double r26943 = r26936 / r26942;
        double r26944 = r26932 * r26943;
        double r26945 = cbrt(r26944);
        double r26946 = r26941 + r26945;
        double r26947 = r26933 - r26938;
        double r26948 = r26936 / r26947;
        double r26949 = r26932 * r26948;
        double r26950 = cbrt(r26949);
        double r26951 = r26932 * r26947;
        double r26952 = cbrt(r26951);
        double r26953 = r26950 + r26952;
        double r26954 = r26927 ? r26946 : r26953;
        return r26954;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r26955, r26956, r26957, r26958, r26959, r26960, r26961, r26962, r26963, r26964, r26965, r26966, r26967, r26968, r26969, r26970, r26971, r26972, r26973;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r26955, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r26956, "2", 10, MPFR_RNDN);
        mpfr_init(r26957);
        mpfr_init(r26958);
        mpfr_init(r26959);
        mpfr_init(r26960);
        mpfr_init(r26961);
        mpfr_init(r26962);
        mpfr_init(r26963);
        mpfr_init(r26964);
        mpfr_init(r26965);
        mpfr_init(r26966);
        mpfr_init(r26967);
        mpfr_init(r26968);
        mpfr_init(r26969);
        mpfr_init(r26970);
        mpfr_init(r26971);
        mpfr_init(r26972);
        mpfr_init(r26973);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r26957, a, MPFR_RNDN);
        mpfr_mul(r26958, r26956, r26957, MPFR_RNDN);
        mpfr_div(r26959, r26955, r26958, MPFR_RNDN);
        mpfr_set_d(r26960, g, MPFR_RNDN);
        mpfr_neg(r26961, r26960, MPFR_RNDN);
        mpfr_mul(r26962, r26960, r26960, MPFR_RNDN);
        mpfr_set_d(r26963, h, MPFR_RNDN);
        mpfr_mul(r26964, r26963, r26963, MPFR_RNDN);
        mpfr_sub(r26965, r26962, r26964, MPFR_RNDN);
        mpfr_sqrt(r26966, r26965, MPFR_RNDN);
        mpfr_add(r26967, r26961, r26966, MPFR_RNDN);
        mpfr_mul(r26968, r26959, r26967, MPFR_RNDN);
        mpfr_cbrt(r26969, r26968, MPFR_RNDN);
        mpfr_sub(r26970, r26961, r26966, MPFR_RNDN);
        mpfr_mul(r26971, r26959, r26970, MPFR_RNDN);
        mpfr_cbrt(r26972, r26971, MPFR_RNDN);
        mpfr_add(r26973, r26969, r26972, MPFR_RNDN);
        return mpfr_get_d(r26973, MPFR_RNDN);
}

static mpfr_t r26974, r26975, r26976, r26977, r26978, r26979, r26980, r26981, r26982, r26983, r26984, r26985, r26986, r26987, r26988, r26989, r26990, r26991, r26992, r26993, r26994, r26995, r26996, r26997, r26998, r26999, r27000, r27001, r27002, r27003;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r26974);
        mpfr_init_set_str(r26975, "-1.5760961644984926e-162", 10, MPFR_RNDN);
        mpfr_init(r26976);
        mpfr_init_set_str(r26977, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r26978, "2", 10, MPFR_RNDN);
        mpfr_init(r26979);
        mpfr_init(r26980);
        mpfr_init(r26981);
        mpfr_init(r26982);
        mpfr_init(r26983);
        mpfr_init(r26984);
        mpfr_init(r26985);
        mpfr_init(r26986);
        mpfr_init(r26987);
        mpfr_init(r26988);
        mpfr_init(r26989);
        mpfr_init(r26990);
        mpfr_init(r26991);
        mpfr_init(r26992);
        mpfr_init(r26993);
        mpfr_init(r26994);
        mpfr_init(r26995);
        mpfr_init(r26996);
        mpfr_init(r26997);
        mpfr_init(r26998);
        mpfr_init(r26999);
        mpfr_init(r27000);
        mpfr_init(r27001);
        mpfr_init(r27002);
        mpfr_init(r27003);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r26974, g, MPFR_RNDN);
        ;
        mpfr_set_si(r26976, mpfr_cmp(r26974, r26975) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r26979, a, MPFR_RNDN);
        mpfr_mul(r26980, r26978, r26979, MPFR_RNDN);
        mpfr_div(r26981, r26977, r26980, MPFR_RNDN);
        mpfr_neg(r26982, r26974, MPFR_RNDN);
        mpfr_mul(r26983, r26974, r26974, MPFR_RNDN);
        mpfr_set_d(r26984, h, MPFR_RNDN);
        mpfr_mul(r26985, r26984, r26984, MPFR_RNDN);
        mpfr_sub(r26986, r26983, r26985, MPFR_RNDN);
        mpfr_sqrt(r26987, r26986, MPFR_RNDN);
        mpfr_add(r26988, r26982, r26987, MPFR_RNDN);
        mpfr_mul(r26989, r26981, r26988, MPFR_RNDN);
        mpfr_cbrt(r26990, r26989, MPFR_RNDN);
        mpfr_sub(r26991, r26987, r26974, MPFR_RNDN);
        mpfr_div(r26992, r26985, r26991, MPFR_RNDN);
        mpfr_mul(r26993, r26981, r26992, MPFR_RNDN);
        mpfr_cbrt(r26994, r26993, MPFR_RNDN);
        mpfr_add(r26995, r26990, r26994, MPFR_RNDN);
        mpfr_sub(r26996, r26982, r26987, MPFR_RNDN);
        mpfr_div(r26997, r26985, r26996, MPFR_RNDN);
        mpfr_mul(r26998, r26981, r26997, MPFR_RNDN);
        mpfr_cbrt(r26999, r26998, MPFR_RNDN);
        mpfr_mul(r27000, r26981, r26996, MPFR_RNDN);
        mpfr_cbrt(r27001, r27000, MPFR_RNDN);
        mpfr_add(r27002, r26999, r27001, MPFR_RNDN);
        if (mpfr_get_si(r26976, MPFR_RNDN)) { mpfr_set(r27003, r26995, MPFR_RNDN); } else { mpfr_set(r27003, r27002, MPFR_RNDN); };
        return mpfr_get_d(r27003, MPFR_RNDN);
}

static mpfr_t r27004, r27005, r27006, r27007, r27008, r27009, r27010, r27011, r27012, r27013, r27014, r27015, r27016, r27017, r27018, r27019, r27020, r27021, r27022, r27023, r27024, r27025, r27026, r27027, r27028, r27029, r27030, r27031, r27032, r27033;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27004);
        mpfr_init_set_str(r27005, "-1.5760961644984926e-162", 10, MPFR_RNDN);
        mpfr_init(r27006);
        mpfr_init_set_str(r27007, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27008, "2", 10, MPFR_RNDN);
        mpfr_init(r27009);
        mpfr_init(r27010);
        mpfr_init(r27011);
        mpfr_init(r27012);
        mpfr_init(r27013);
        mpfr_init(r27014);
        mpfr_init(r27015);
        mpfr_init(r27016);
        mpfr_init(r27017);
        mpfr_init(r27018);
        mpfr_init(r27019);
        mpfr_init(r27020);
        mpfr_init(r27021);
        mpfr_init(r27022);
        mpfr_init(r27023);
        mpfr_init(r27024);
        mpfr_init(r27025);
        mpfr_init(r27026);
        mpfr_init(r27027);
        mpfr_init(r27028);
        mpfr_init(r27029);
        mpfr_init(r27030);
        mpfr_init(r27031);
        mpfr_init(r27032);
        mpfr_init(r27033);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r27004, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27006, mpfr_cmp(r27004, r27005) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27009, a, MPFR_RNDN);
        mpfr_mul(r27010, r27008, r27009, MPFR_RNDN);
        mpfr_div(r27011, r27007, r27010, MPFR_RNDN);
        mpfr_neg(r27012, r27004, MPFR_RNDN);
        mpfr_mul(r27013, r27004, r27004, MPFR_RNDN);
        mpfr_set_d(r27014, h, MPFR_RNDN);
        mpfr_mul(r27015, r27014, r27014, MPFR_RNDN);
        mpfr_sub(r27016, r27013, r27015, MPFR_RNDN);
        mpfr_sqrt(r27017, r27016, MPFR_RNDN);
        mpfr_add(r27018, r27012, r27017, MPFR_RNDN);
        mpfr_mul(r27019, r27011, r27018, MPFR_RNDN);
        mpfr_cbrt(r27020, r27019, MPFR_RNDN);
        mpfr_sub(r27021, r27017, r27004, MPFR_RNDN);
        mpfr_div(r27022, r27015, r27021, MPFR_RNDN);
        mpfr_mul(r27023, r27011, r27022, MPFR_RNDN);
        mpfr_cbrt(r27024, r27023, MPFR_RNDN);
        mpfr_add(r27025, r27020, r27024, MPFR_RNDN);
        mpfr_sub(r27026, r27012, r27017, MPFR_RNDN);
        mpfr_div(r27027, r27015, r27026, MPFR_RNDN);
        mpfr_mul(r27028, r27011, r27027, MPFR_RNDN);
        mpfr_cbrt(r27029, r27028, MPFR_RNDN);
        mpfr_mul(r27030, r27011, r27026, MPFR_RNDN);
        mpfr_cbrt(r27031, r27030, MPFR_RNDN);
        mpfr_add(r27032, r27029, r27031, MPFR_RNDN);
        if (mpfr_get_si(r27006, MPFR_RNDN)) { mpfr_set(r27033, r27025, MPFR_RNDN); } else { mpfr_set(r27033, r27032, MPFR_RNDN); };
        return mpfr_get_d(r27033, MPFR_RNDN);
}

