#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 r37030 = 1;
        float r37031 = 2;
        float r37032 = a;
        float r37033 = r37031 * r37032;
        float r37034 = r37030 / r37033;
        float r37035 = g;
        float r37036 = -r37035;
        float r37037 = r37035 * r37035;
        float r37038 = h;
        float r37039 = r37038 * r37038;
        float r37040 = r37037 - r37039;
        float r37041 = sqrt(r37040);
        float r37042 = r37036 + r37041;
        float r37043 = r37034 * r37042;
        float r37044 = cbrt(r37043);
        float r37045 = r37036 - r37041;
        float r37046 = r37034 * r37045;
        float r37047 = cbrt(r37046);
        float r37048 = r37044 + r37047;
        return r37048;
}

double f_id(double g, double h, double a) {
        double r37049 = 1;
        double r37050 = 2;
        double r37051 = a;
        double r37052 = r37050 * r37051;
        double r37053 = r37049 / r37052;
        double r37054 = g;
        double r37055 = -r37054;
        double r37056 = r37054 * r37054;
        double r37057 = h;
        double r37058 = r37057 * r37057;
        double r37059 = r37056 - r37058;
        double r37060 = sqrt(r37059);
        double r37061 = r37055 + r37060;
        double r37062 = r37053 * r37061;
        double r37063 = cbrt(r37062);
        double r37064 = r37055 - r37060;
        double r37065 = r37053 * r37064;
        double r37066 = cbrt(r37065);
        double r37067 = r37063 + r37066;
        return r37067;
}


double f_of(float g, float h, float a) {
        float r37068 = g;
        float r37069 = 1.330799445697389e-162;
        bool r37070 = r37068 <= r37069;
        float r37071 = -r37068;
        float r37072 = h;
        float r37073 = r37068 + r37072;
        float r37074 = r37068 - r37072;
        float r37075 = r37073 * r37074;
        float r37076 = sqrt(r37075);
        float r37077 = r37071 + r37076;
        float r37078 = cbrt(r37077);
        float r37079 = a;
        float r37080 = r37079 + r37079;
        float r37081 = cbrt(r37080);
        float r37082 = r37078 / r37081;
        float r37083 = r37068 * r37068;
        float r37084 = r37074 * r37073;
        float r37085 = r37083 - r37084;
        float r37086 = r37085 / r37077;
        float r37087 = r37086 / r37080;
        float r37088 = cbrt(r37087);
        float r37089 = r37082 + r37088;
        float r37090 = r37077 / r37080;
        float r37091 = cbrt(r37090);
        float r37092 = r37071 - r37076;
        float r37093 = cbrt(r37092);
        float r37094 = r37093 / r37081;
        float r37095 = r37091 + r37094;
        float r37096 = r37070 ? r37089 : r37095;
        return r37096;
}

double f_od(double g, double h, double a) {
        double r37097 = g;
        double r37098 = 1.330799445697389e-162;
        bool r37099 = r37097 <= r37098;
        double r37100 = -r37097;
        double r37101 = h;
        double r37102 = r37097 + r37101;
        double r37103 = r37097 - r37101;
        double r37104 = r37102 * r37103;
        double r37105 = sqrt(r37104);
        double r37106 = r37100 + r37105;
        double r37107 = cbrt(r37106);
        double r37108 = a;
        double r37109 = r37108 + r37108;
        double r37110 = cbrt(r37109);
        double r37111 = r37107 / r37110;
        double r37112 = r37097 * r37097;
        double r37113 = r37103 * r37102;
        double r37114 = r37112 - r37113;
        double r37115 = r37114 / r37106;
        double r37116 = r37115 / r37109;
        double r37117 = cbrt(r37116);
        double r37118 = r37111 + r37117;
        double r37119 = r37106 / r37109;
        double r37120 = cbrt(r37119);
        double r37121 = r37100 - r37105;
        double r37122 = cbrt(r37121);
        double r37123 = r37122 / r37110;
        double r37124 = r37120 + r37123;
        double r37125 = r37099 ? r37118 : r37124;
        return r37125;
}

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 r37126, r37127, r37128, r37129, r37130, r37131, r37132, r37133, r37134, r37135, r37136, r37137, r37138, r37139, r37140, r37141, r37142, r37143, r37144;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r37126, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37127, "2", 10, MPFR_RNDN);
        mpfr_init(r37128);
        mpfr_init(r37129);
        mpfr_init(r37130);
        mpfr_init(r37131);
        mpfr_init(r37132);
        mpfr_init(r37133);
        mpfr_init(r37134);
        mpfr_init(r37135);
        mpfr_init(r37136);
        mpfr_init(r37137);
        mpfr_init(r37138);
        mpfr_init(r37139);
        mpfr_init(r37140);
        mpfr_init(r37141);
        mpfr_init(r37142);
        mpfr_init(r37143);
        mpfr_init(r37144);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r37128, a, MPFR_RNDN);
        mpfr_mul(r37129, r37127, r37128, MPFR_RNDN);
        mpfr_div(r37130, r37126, r37129, MPFR_RNDN);
        mpfr_set_d(r37131, g, MPFR_RNDN);
        mpfr_neg(r37132, r37131, MPFR_RNDN);
        mpfr_mul(r37133, r37131, r37131, MPFR_RNDN);
        mpfr_set_d(r37134, h, MPFR_RNDN);
        mpfr_mul(r37135, r37134, r37134, MPFR_RNDN);
        mpfr_sub(r37136, r37133, r37135, MPFR_RNDN);
        mpfr_sqrt(r37137, r37136, MPFR_RNDN);
        mpfr_add(r37138, r37132, r37137, MPFR_RNDN);
        mpfr_mul(r37139, r37130, r37138, MPFR_RNDN);
        mpfr_cbrt(r37140, r37139, MPFR_RNDN);
        mpfr_sub(r37141, r37132, r37137, MPFR_RNDN);
        mpfr_mul(r37142, r37130, r37141, MPFR_RNDN);
        mpfr_cbrt(r37143, r37142, MPFR_RNDN);
        mpfr_add(r37144, r37140, r37143, MPFR_RNDN);
        return mpfr_get_d(r37144, MPFR_RNDN);
}

static mpfr_t r37145, r37146, r37147, r37148, r37149, r37150, r37151, r37152, r37153, r37154, r37155, r37156, r37157, r37158, r37159, r37160, r37161, r37162, r37163, r37164, r37165, r37166, r37167, r37168, r37169, r37170, r37171, r37172, r37173;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37145);
        mpfr_init_set_str(r37146, "1.330799445697389e-162", 10, MPFR_RNDN);
        mpfr_init(r37147);
        mpfr_init(r37148);
        mpfr_init(r37149);
        mpfr_init(r37150);
        mpfr_init(r37151);
        mpfr_init(r37152);
        mpfr_init(r37153);
        mpfr_init(r37154);
        mpfr_init(r37155);
        mpfr_init(r37156);
        mpfr_init(r37157);
        mpfr_init(r37158);
        mpfr_init(r37159);
        mpfr_init(r37160);
        mpfr_init(r37161);
        mpfr_init(r37162);
        mpfr_init(r37163);
        mpfr_init(r37164);
        mpfr_init(r37165);
        mpfr_init(r37166);
        mpfr_init(r37167);
        mpfr_init(r37168);
        mpfr_init(r37169);
        mpfr_init(r37170);
        mpfr_init(r37171);
        mpfr_init(r37172);
        mpfr_init(r37173);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r37145, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37147, mpfr_cmp(r37145, r37146) <= 0, MPFR_RNDN);
        mpfr_neg(r37148, r37145, MPFR_RNDN);
        mpfr_set_d(r37149, h, MPFR_RNDN);
        mpfr_add(r37150, r37145, r37149, MPFR_RNDN);
        mpfr_sub(r37151, r37145, r37149, MPFR_RNDN);
        mpfr_mul(r37152, r37150, r37151, MPFR_RNDN);
        mpfr_sqrt(r37153, r37152, MPFR_RNDN);
        mpfr_add(r37154, r37148, r37153, MPFR_RNDN);
        mpfr_cbrt(r37155, r37154, MPFR_RNDN);
        mpfr_set_d(r37156, a, MPFR_RNDN);
        mpfr_add(r37157, r37156, r37156, MPFR_RNDN);
        mpfr_cbrt(r37158, r37157, MPFR_RNDN);
        mpfr_div(r37159, r37155, r37158, MPFR_RNDN);
        mpfr_mul(r37160, r37145, r37145, MPFR_RNDN);
        mpfr_mul(r37161, r37151, r37150, MPFR_RNDN);
        mpfr_sub(r37162, r37160, r37161, MPFR_RNDN);
        mpfr_div(r37163, r37162, r37154, MPFR_RNDN);
        mpfr_div(r37164, r37163, r37157, MPFR_RNDN);
        mpfr_cbrt(r37165, r37164, MPFR_RNDN);
        mpfr_add(r37166, r37159, r37165, MPFR_RNDN);
        mpfr_div(r37167, r37154, r37157, MPFR_RNDN);
        mpfr_cbrt(r37168, r37167, MPFR_RNDN);
        mpfr_sub(r37169, r37148, r37153, MPFR_RNDN);
        mpfr_cbrt(r37170, r37169, MPFR_RNDN);
        mpfr_div(r37171, r37170, r37158, MPFR_RNDN);
        mpfr_add(r37172, r37168, r37171, MPFR_RNDN);
        if (mpfr_get_si(r37147, MPFR_RNDN)) { mpfr_set(r37173, r37166, MPFR_RNDN); } else { mpfr_set(r37173, r37172, MPFR_RNDN); };
        return mpfr_get_d(r37173, MPFR_RNDN);
}

static mpfr_t r37174, r37175, r37176, r37177, r37178, r37179, r37180, r37181, r37182, r37183, r37184, r37185, r37186, r37187, r37188, r37189, r37190, r37191, r37192, r37193, r37194, r37195, r37196, r37197, r37198, r37199, r37200, r37201, r37202;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37174);
        mpfr_init_set_str(r37175, "1.330799445697389e-162", 10, MPFR_RNDN);
        mpfr_init(r37176);
        mpfr_init(r37177);
        mpfr_init(r37178);
        mpfr_init(r37179);
        mpfr_init(r37180);
        mpfr_init(r37181);
        mpfr_init(r37182);
        mpfr_init(r37183);
        mpfr_init(r37184);
        mpfr_init(r37185);
        mpfr_init(r37186);
        mpfr_init(r37187);
        mpfr_init(r37188);
        mpfr_init(r37189);
        mpfr_init(r37190);
        mpfr_init(r37191);
        mpfr_init(r37192);
        mpfr_init(r37193);
        mpfr_init(r37194);
        mpfr_init(r37195);
        mpfr_init(r37196);
        mpfr_init(r37197);
        mpfr_init(r37198);
        mpfr_init(r37199);
        mpfr_init(r37200);
        mpfr_init(r37201);
        mpfr_init(r37202);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r37174, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37176, mpfr_cmp(r37174, r37175) <= 0, MPFR_RNDN);
        mpfr_neg(r37177, r37174, MPFR_RNDN);
        mpfr_set_d(r37178, h, MPFR_RNDN);
        mpfr_add(r37179, r37174, r37178, MPFR_RNDN);
        mpfr_sub(r37180, r37174, r37178, MPFR_RNDN);
        mpfr_mul(r37181, r37179, r37180, MPFR_RNDN);
        mpfr_sqrt(r37182, r37181, MPFR_RNDN);
        mpfr_add(r37183, r37177, r37182, MPFR_RNDN);
        mpfr_cbrt(r37184, r37183, MPFR_RNDN);
        mpfr_set_d(r37185, a, MPFR_RNDN);
        mpfr_add(r37186, r37185, r37185, MPFR_RNDN);
        mpfr_cbrt(r37187, r37186, MPFR_RNDN);
        mpfr_div(r37188, r37184, r37187, MPFR_RNDN);
        mpfr_mul(r37189, r37174, r37174, MPFR_RNDN);
        mpfr_mul(r37190, r37180, r37179, MPFR_RNDN);
        mpfr_sub(r37191, r37189, r37190, MPFR_RNDN);
        mpfr_div(r37192, r37191, r37183, MPFR_RNDN);
        mpfr_div(r37193, r37192, r37186, MPFR_RNDN);
        mpfr_cbrt(r37194, r37193, MPFR_RNDN);
        mpfr_add(r37195, r37188, r37194, MPFR_RNDN);
        mpfr_div(r37196, r37183, r37186, MPFR_RNDN);
        mpfr_cbrt(r37197, r37196, MPFR_RNDN);
        mpfr_sub(r37198, r37177, r37182, MPFR_RNDN);
        mpfr_cbrt(r37199, r37198, MPFR_RNDN);
        mpfr_div(r37200, r37199, r37187, MPFR_RNDN);
        mpfr_add(r37201, r37197, r37200, MPFR_RNDN);
        if (mpfr_get_si(r37176, MPFR_RNDN)) { mpfr_set(r37202, r37195, MPFR_RNDN); } else { mpfr_set(r37202, r37201, MPFR_RNDN); };
        return mpfr_get_d(r37202, MPFR_RNDN);
}

