#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 r26922 = 1;
        float r26923 = 2;
        float r26924 = a;
        float r26925 = r26923 * r26924;
        float r26926 = r26922 / r26925;
        float r26927 = g;
        float r26928 = -r26927;
        float r26929 = r26927 * r26927;
        float r26930 = h;
        float r26931 = r26930 * r26930;
        float r26932 = r26929 - r26931;
        float r26933 = sqrt(r26932);
        float r26934 = r26928 + r26933;
        float r26935 = r26926 * r26934;
        float r26936 = cbrt(r26935);
        float r26937 = r26928 - r26933;
        float r26938 = r26926 * r26937;
        float r26939 = cbrt(r26938);
        float r26940 = r26936 + r26939;
        return r26940;
}

double f_id(double g, double h, double a) {
        double r26941 = 1;
        double r26942 = 2;
        double r26943 = a;
        double r26944 = r26942 * r26943;
        double r26945 = r26941 / r26944;
        double r26946 = g;
        double r26947 = -r26946;
        double r26948 = r26946 * r26946;
        double r26949 = h;
        double r26950 = r26949 * r26949;
        double r26951 = r26948 - r26950;
        double r26952 = sqrt(r26951);
        double r26953 = r26947 + r26952;
        double r26954 = r26945 * r26953;
        double r26955 = cbrt(r26954);
        double r26956 = r26947 - r26952;
        double r26957 = r26945 * r26956;
        double r26958 = cbrt(r26957);
        double r26959 = r26955 + r26958;
        return r26959;
}


double f_of(float g, float h, float a) {
        float r26960 = g;
        float r26961 = -1.5584971956813441e-162;
        bool r26962 = r26960 <= r26961;
        float r26963 = 1;
        float r26964 = 2;
        float r26965 = a;
        float r26966 = r26964 * r26965;
        float r26967 = r26963 / r26966;
        float r26968 = -r26960;
        float r26969 = r26960 * r26960;
        float r26970 = h;
        float r26971 = r26970 * r26970;
        float r26972 = r26969 - r26971;
        float r26973 = sqrt(r26972);
        float r26974 = r26968 + r26973;
        float r26975 = r26967 * r26974;
        float r26976 = cbrt(r26975);
        float r26977 = r26973 - r26960;
        float r26978 = r26971 / r26977;
        float r26979 = r26967 * r26978;
        float r26980 = cbrt(r26979);
        float r26981 = r26976 + r26980;
        float r26982 = r26968 - r26973;
        float r26983 = r26971 / r26982;
        float r26984 = r26967 * r26983;
        float r26985 = cbrt(r26984);
        float r26986 = r26967 * r26982;
        float r26987 = cbrt(r26986);
        float r26988 = r26985 + r26987;
        float r26989 = r26962 ? r26981 : r26988;
        return r26989;
}

double f_od(double g, double h, double a) {
        double r26990 = g;
        double r26991 = -1.5584971956813441e-162;
        bool r26992 = r26990 <= r26991;
        double r26993 = 1;
        double r26994 = 2;
        double r26995 = a;
        double r26996 = r26994 * r26995;
        double r26997 = r26993 / r26996;
        double r26998 = -r26990;
        double r26999 = r26990 * r26990;
        double r27000 = h;
        double r27001 = r27000 * r27000;
        double r27002 = r26999 - r27001;
        double r27003 = sqrt(r27002);
        double r27004 = r26998 + r27003;
        double r27005 = r26997 * r27004;
        double r27006 = cbrt(r27005);
        double r27007 = r27003 - r26990;
        double r27008 = r27001 / r27007;
        double r27009 = r26997 * r27008;
        double r27010 = cbrt(r27009);
        double r27011 = r27006 + r27010;
        double r27012 = r26998 - r27003;
        double r27013 = r27001 / r27012;
        double r27014 = r26997 * r27013;
        double r27015 = cbrt(r27014);
        double r27016 = r26997 * r27012;
        double r27017 = cbrt(r27016);
        double r27018 = r27015 + r27017;
        double r27019 = r26992 ? r27011 : r27018;
        return r27019;
}

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 r27020, r27021, r27022, r27023, r27024, r27025, r27026, r27027, r27028, r27029, r27030, r27031, r27032, r27033, r27034, r27035, r27036, r27037, r27038;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27020, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27021, "2", 10, MPFR_RNDN);
        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);
        mpfr_init(r27034);
        mpfr_init(r27035);
        mpfr_init(r27036);
        mpfr_init(r27037);
        mpfr_init(r27038);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r27022, a, MPFR_RNDN);
        mpfr_mul(r27023, r27021, r27022, MPFR_RNDN);
        mpfr_div(r27024, r27020, r27023, MPFR_RNDN);
        mpfr_set_d(r27025, g, MPFR_RNDN);
        mpfr_neg(r27026, r27025, MPFR_RNDN);
        mpfr_mul(r27027, r27025, r27025, MPFR_RNDN);
        mpfr_set_d(r27028, h, MPFR_RNDN);
        mpfr_mul(r27029, r27028, r27028, MPFR_RNDN);
        mpfr_sub(r27030, r27027, r27029, MPFR_RNDN);
        mpfr_sqrt(r27031, r27030, MPFR_RNDN);
        mpfr_add(r27032, r27026, r27031, MPFR_RNDN);
        mpfr_mul(r27033, r27024, r27032, MPFR_RNDN);
        mpfr_cbrt(r27034, r27033, MPFR_RNDN);
        mpfr_sub(r27035, r27026, r27031, MPFR_RNDN);
        mpfr_mul(r27036, r27024, r27035, MPFR_RNDN);
        mpfr_cbrt(r27037, r27036, MPFR_RNDN);
        mpfr_add(r27038, r27034, r27037, MPFR_RNDN);
        return mpfr_get_d(r27038, MPFR_RNDN);
}

static mpfr_t r27039, r27040, r27041, r27042, r27043, r27044, r27045, r27046, r27047, r27048, r27049, r27050, r27051, r27052, r27053, r27054, r27055, r27056, r27057, r27058, r27059, r27060, r27061, r27062, r27063, r27064, r27065, r27066, r27067, r27068;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27039);
        mpfr_init_set_str(r27040, "-1.5584971956813441e-162", 10, MPFR_RNDN);
        mpfr_init(r27041);
        mpfr_init_set_str(r27042, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27043, "2", 10, MPFR_RNDN);
        mpfr_init(r27044);
        mpfr_init(r27045);
        mpfr_init(r27046);
        mpfr_init(r27047);
        mpfr_init(r27048);
        mpfr_init(r27049);
        mpfr_init(r27050);
        mpfr_init(r27051);
        mpfr_init(r27052);
        mpfr_init(r27053);
        mpfr_init(r27054);
        mpfr_init(r27055);
        mpfr_init(r27056);
        mpfr_init(r27057);
        mpfr_init(r27058);
        mpfr_init(r27059);
        mpfr_init(r27060);
        mpfr_init(r27061);
        mpfr_init(r27062);
        mpfr_init(r27063);
        mpfr_init(r27064);
        mpfr_init(r27065);
        mpfr_init(r27066);
        mpfr_init(r27067);
        mpfr_init(r27068);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r27039, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27041, mpfr_cmp(r27039, r27040) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27044, a, MPFR_RNDN);
        mpfr_mul(r27045, r27043, r27044, MPFR_RNDN);
        mpfr_div(r27046, r27042, r27045, MPFR_RNDN);
        mpfr_neg(r27047, r27039, MPFR_RNDN);
        mpfr_mul(r27048, r27039, r27039, MPFR_RNDN);
        mpfr_set_d(r27049, h, MPFR_RNDN);
        mpfr_mul(r27050, r27049, r27049, MPFR_RNDN);
        mpfr_sub(r27051, r27048, r27050, MPFR_RNDN);
        mpfr_sqrt(r27052, r27051, MPFR_RNDN);
        mpfr_add(r27053, r27047, r27052, MPFR_RNDN);
        mpfr_mul(r27054, r27046, r27053, MPFR_RNDN);
        mpfr_cbrt(r27055, r27054, MPFR_RNDN);
        mpfr_sub(r27056, r27052, r27039, MPFR_RNDN);
        mpfr_div(r27057, r27050, r27056, MPFR_RNDN);
        mpfr_mul(r27058, r27046, r27057, MPFR_RNDN);
        mpfr_cbrt(r27059, r27058, MPFR_RNDN);
        mpfr_add(r27060, r27055, r27059, MPFR_RNDN);
        mpfr_sub(r27061, r27047, r27052, MPFR_RNDN);
        mpfr_div(r27062, r27050, r27061, MPFR_RNDN);
        mpfr_mul(r27063, r27046, r27062, MPFR_RNDN);
        mpfr_cbrt(r27064, r27063, MPFR_RNDN);
        mpfr_mul(r27065, r27046, r27061, MPFR_RNDN);
        mpfr_cbrt(r27066, r27065, MPFR_RNDN);
        mpfr_add(r27067, r27064, r27066, MPFR_RNDN);
        if (mpfr_get_si(r27041, MPFR_RNDN)) { mpfr_set(r27068, r27060, MPFR_RNDN); } else { mpfr_set(r27068, r27067, MPFR_RNDN); };
        return mpfr_get_d(r27068, MPFR_RNDN);
}

static mpfr_t r27069, r27070, r27071, r27072, r27073, r27074, r27075, r27076, r27077, r27078, r27079, r27080, r27081, r27082, r27083, r27084, r27085, r27086, r27087, r27088, r27089, r27090, r27091, r27092, r27093, r27094, r27095, r27096, r27097, r27098;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27069);
        mpfr_init_set_str(r27070, "-1.5584971956813441e-162", 10, MPFR_RNDN);
        mpfr_init(r27071);
        mpfr_init_set_str(r27072, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27073, "2", 10, MPFR_RNDN);
        mpfr_init(r27074);
        mpfr_init(r27075);
        mpfr_init(r27076);
        mpfr_init(r27077);
        mpfr_init(r27078);
        mpfr_init(r27079);
        mpfr_init(r27080);
        mpfr_init(r27081);
        mpfr_init(r27082);
        mpfr_init(r27083);
        mpfr_init(r27084);
        mpfr_init(r27085);
        mpfr_init(r27086);
        mpfr_init(r27087);
        mpfr_init(r27088);
        mpfr_init(r27089);
        mpfr_init(r27090);
        mpfr_init(r27091);
        mpfr_init(r27092);
        mpfr_init(r27093);
        mpfr_init(r27094);
        mpfr_init(r27095);
        mpfr_init(r27096);
        mpfr_init(r27097);
        mpfr_init(r27098);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r27069, g, MPFR_RNDN);
        ;
        mpfr_set_si(r27071, mpfr_cmp(r27069, r27070) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r27074, a, MPFR_RNDN);
        mpfr_mul(r27075, r27073, r27074, MPFR_RNDN);
        mpfr_div(r27076, r27072, r27075, MPFR_RNDN);
        mpfr_neg(r27077, r27069, MPFR_RNDN);
        mpfr_mul(r27078, r27069, r27069, MPFR_RNDN);
        mpfr_set_d(r27079, h, MPFR_RNDN);
        mpfr_mul(r27080, r27079, r27079, MPFR_RNDN);
        mpfr_sub(r27081, r27078, r27080, MPFR_RNDN);
        mpfr_sqrt(r27082, r27081, MPFR_RNDN);
        mpfr_add(r27083, r27077, r27082, MPFR_RNDN);
        mpfr_mul(r27084, r27076, r27083, MPFR_RNDN);
        mpfr_cbrt(r27085, r27084, MPFR_RNDN);
        mpfr_sub(r27086, r27082, r27069, MPFR_RNDN);
        mpfr_div(r27087, r27080, r27086, MPFR_RNDN);
        mpfr_mul(r27088, r27076, r27087, MPFR_RNDN);
        mpfr_cbrt(r27089, r27088, MPFR_RNDN);
        mpfr_add(r27090, r27085, r27089, MPFR_RNDN);
        mpfr_sub(r27091, r27077, r27082, MPFR_RNDN);
        mpfr_div(r27092, r27080, r27091, MPFR_RNDN);
        mpfr_mul(r27093, r27076, r27092, MPFR_RNDN);
        mpfr_cbrt(r27094, r27093, MPFR_RNDN);
        mpfr_mul(r27095, r27076, r27091, MPFR_RNDN);
        mpfr_cbrt(r27096, r27095, MPFR_RNDN);
        mpfr_add(r27097, r27094, r27096, MPFR_RNDN);
        if (mpfr_get_si(r27071, MPFR_RNDN)) { mpfr_set(r27098, r27090, MPFR_RNDN); } else { mpfr_set(r27098, r27097, MPFR_RNDN); };
        return mpfr_get_d(r27098, MPFR_RNDN);
}

