#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 r26970 = 1;
        float r26971 = 2;
        float r26972 = a;
        float r26973 = r26971 * r26972;
        float r26974 = r26970 / r26973;
        float r26975 = g;
        float r26976 = -r26975;
        float r26977 = r26975 * r26975;
        float r26978 = h;
        float r26979 = r26978 * r26978;
        float r26980 = r26977 - r26979;
        float r26981 = sqrt(r26980);
        float r26982 = r26976 + r26981;
        float r26983 = r26974 * r26982;
        float r26984 = cbrt(r26983);
        float r26985 = r26976 - r26981;
        float r26986 = r26974 * r26985;
        float r26987 = cbrt(r26986);
        float r26988 = r26984 + r26987;
        return r26988;
}

double f_id(double g, double h, double a) {
        double r26989 = 1;
        double r26990 = 2;
        double r26991 = a;
        double r26992 = r26990 * r26991;
        double r26993 = r26989 / r26992;
        double r26994 = g;
        double r26995 = -r26994;
        double r26996 = r26994 * r26994;
        double r26997 = h;
        double r26998 = r26997 * r26997;
        double r26999 = r26996 - r26998;
        double r27000 = sqrt(r26999);
        double r27001 = r26995 + r27000;
        double r27002 = r26993 * r27001;
        double r27003 = cbrt(r27002);
        double r27004 = r26995 - r27000;
        double r27005 = r26993 * r27004;
        double r27006 = cbrt(r27005);
        double r27007 = r27003 + r27006;
        return r27007;
}


double f_of(float g, float h, float a) {
        float r27008 = g;
        float r27009 = h;
        float r27010 = r27008 + r27009;
        float r27011 = r27008 - r27009;
        float r27012 = r27010 * r27011;
        float r27013 = sqrt(r27012);
        float r27014 = r27013 - r27008;
        float r27015 = cbrt(r27014);
        float r27016 = r27015 * r27015;
        float r27017 = r27016 * r27015;
        float r27018 = a;
        float r27019 = 2;
        float r27020 = r27018 * r27019;
        float r27021 = r27017 / r27020;
        float r27022 = cbrt(r27021);
        float r27023 = -r27008;
        float r27024 = r27023 - r27013;
        float r27025 = r27024 / r27020;
        float r27026 = cbrt(r27025);
        float r27027 = r27022 + r27026;
        return r27027;
}

double f_od(double g, double h, double a) {
        double r27028 = g;
        double r27029 = h;
        double r27030 = r27028 + r27029;
        double r27031 = r27028 - r27029;
        double r27032 = r27030 * r27031;
        double r27033 = sqrt(r27032);
        double r27034 = r27033 - r27028;
        double r27035 = cbrt(r27034);
        double r27036 = r27035 * r27035;
        double r27037 = r27036 * r27035;
        double r27038 = a;
        double r27039 = 2;
        double r27040 = r27038 * r27039;
        double r27041 = r27037 / r27040;
        double r27042 = cbrt(r27041);
        double r27043 = -r27028;
        double r27044 = r27043 - r27033;
        double r27045 = r27044 / r27040;
        double r27046 = cbrt(r27045);
        double r27047 = r27042 + r27046;
        return r27047;
}

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 r27048, r27049, r27050, r27051, r27052, r27053, r27054, r27055, r27056, r27057, r27058, r27059, r27060, r27061, r27062, r27063, r27064, r27065, r27066;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27048, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r27049, "2", 10, MPFR_RNDN);
        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);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r27050, a, MPFR_RNDN);
        mpfr_mul(r27051, r27049, r27050, MPFR_RNDN);
        mpfr_div(r27052, r27048, r27051, MPFR_RNDN);
        mpfr_set_d(r27053, g, MPFR_RNDN);
        mpfr_neg(r27054, r27053, MPFR_RNDN);
        mpfr_mul(r27055, r27053, r27053, MPFR_RNDN);
        mpfr_set_d(r27056, h, MPFR_RNDN);
        mpfr_mul(r27057, r27056, r27056, MPFR_RNDN);
        mpfr_sub(r27058, r27055, r27057, MPFR_RNDN);
        mpfr_sqrt(r27059, r27058, MPFR_RNDN);
        mpfr_add(r27060, r27054, r27059, MPFR_RNDN);
        mpfr_mul(r27061, r27052, r27060, MPFR_RNDN);
        mpfr_cbrt(r27062, r27061, MPFR_RNDN);
        mpfr_sub(r27063, r27054, r27059, MPFR_RNDN);
        mpfr_mul(r27064, r27052, r27063, MPFR_RNDN);
        mpfr_cbrt(r27065, r27064, MPFR_RNDN);
        mpfr_add(r27066, r27062, r27065, MPFR_RNDN);
        return mpfr_get_d(r27066, MPFR_RNDN);
}

static mpfr_t r27067, r27068, r27069, r27070, r27071, r27072, r27073, r27074, r27075, r27076, r27077, r27078, r27079, r27080, r27081, r27082, r27083, r27084, r27085, r27086;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r27067);
        mpfr_init(r27068);
        mpfr_init(r27069);
        mpfr_init(r27070);
        mpfr_init(r27071);
        mpfr_init(r27072);
        mpfr_init(r27073);
        mpfr_init(r27074);
        mpfr_init(r27075);
        mpfr_init(r27076);
        mpfr_init(r27077);
        mpfr_init_set_str(r27078, "2", 10, MPFR_RNDN);
        mpfr_init(r27079);
        mpfr_init(r27080);
        mpfr_init(r27081);
        mpfr_init(r27082);
        mpfr_init(r27083);
        mpfr_init(r27084);
        mpfr_init(r27085);
        mpfr_init(r27086);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r27067, g, MPFR_RNDN);
        mpfr_set_d(r27068, h, MPFR_RNDN);
        mpfr_add(r27069, r27067, r27068, MPFR_RNDN);
        mpfr_sub(r27070, r27067, r27068, MPFR_RNDN);
        mpfr_mul(r27071, r27069, r27070, MPFR_RNDN);
        mpfr_sqrt(r27072, r27071, MPFR_RNDN);
        mpfr_sub(r27073, r27072, r27067, MPFR_RNDN);
        mpfr_cbrt(r27074, r27073, MPFR_RNDN);
        mpfr_mul(r27075, r27074, r27074, MPFR_RNDN);
        mpfr_mul(r27076, r27075, r27074, MPFR_RNDN);
        mpfr_set_d(r27077, a, MPFR_RNDN);
        ;
        mpfr_mul(r27079, r27077, r27078, MPFR_RNDN);
        mpfr_div(r27080, r27076, r27079, MPFR_RNDN);
        mpfr_cbrt(r27081, r27080, MPFR_RNDN);
        mpfr_neg(r27082, r27067, MPFR_RNDN);
        mpfr_sub(r27083, r27082, r27072, MPFR_RNDN);
        mpfr_div(r27084, r27083, r27079, MPFR_RNDN);
        mpfr_cbrt(r27085, r27084, MPFR_RNDN);
        mpfr_add(r27086, r27081, r27085, MPFR_RNDN);
        return mpfr_get_d(r27086, MPFR_RNDN);
}

static mpfr_t r27087, r27088, r27089, r27090, r27091, r27092, r27093, r27094, r27095, r27096, r27097, r27098, r27099, r27100, r27101, r27102, r27103, r27104, r27105, r27106;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        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_set_str(r27098, "2", 10, MPFR_RNDN);
        mpfr_init(r27099);
        mpfr_init(r27100);
        mpfr_init(r27101);
        mpfr_init(r27102);
        mpfr_init(r27103);
        mpfr_init(r27104);
        mpfr_init(r27105);
        mpfr_init(r27106);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r27087, g, MPFR_RNDN);
        mpfr_set_d(r27088, h, MPFR_RNDN);
        mpfr_add(r27089, r27087, r27088, MPFR_RNDN);
        mpfr_sub(r27090, r27087, r27088, MPFR_RNDN);
        mpfr_mul(r27091, r27089, r27090, MPFR_RNDN);
        mpfr_sqrt(r27092, r27091, MPFR_RNDN);
        mpfr_sub(r27093, r27092, r27087, MPFR_RNDN);
        mpfr_cbrt(r27094, r27093, MPFR_RNDN);
        mpfr_mul(r27095, r27094, r27094, MPFR_RNDN);
        mpfr_mul(r27096, r27095, r27094, MPFR_RNDN);
        mpfr_set_d(r27097, a, MPFR_RNDN);
        ;
        mpfr_mul(r27099, r27097, r27098, MPFR_RNDN);
        mpfr_div(r27100, r27096, r27099, MPFR_RNDN);
        mpfr_cbrt(r27101, r27100, MPFR_RNDN);
        mpfr_neg(r27102, r27087, MPFR_RNDN);
        mpfr_sub(r27103, r27102, r27092, MPFR_RNDN);
        mpfr_div(r27104, r27103, r27099, MPFR_RNDN);
        mpfr_cbrt(r27105, r27104, MPFR_RNDN);
        mpfr_add(r27106, r27101, r27105, MPFR_RNDN);
        return mpfr_get_d(r27106, MPFR_RNDN);
}

