#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 r37108 = 1;
        float r37109 = 2;
        float r37110 = a;
        float r37111 = r37109 * r37110;
        float r37112 = r37108 / r37111;
        float r37113 = g;
        float r37114 = -r37113;
        float r37115 = r37113 * r37113;
        float r37116 = h;
        float r37117 = r37116 * r37116;
        float r37118 = r37115 - r37117;
        float r37119 = sqrt(r37118);
        float r37120 = r37114 + r37119;
        float r37121 = r37112 * r37120;
        float r37122 = cbrt(r37121);
        float r37123 = r37114 - r37119;
        float r37124 = r37112 * r37123;
        float r37125 = cbrt(r37124);
        float r37126 = r37122 + r37125;
        return r37126;
}

double f_id(double g, double h, double a) {
        double r37127 = 1;
        double r37128 = 2;
        double r37129 = a;
        double r37130 = r37128 * r37129;
        double r37131 = r37127 / r37130;
        double r37132 = g;
        double r37133 = -r37132;
        double r37134 = r37132 * r37132;
        double r37135 = h;
        double r37136 = r37135 * r37135;
        double r37137 = r37134 - r37136;
        double r37138 = sqrt(r37137);
        double r37139 = r37133 + r37138;
        double r37140 = r37131 * r37139;
        double r37141 = cbrt(r37140);
        double r37142 = r37133 - r37138;
        double r37143 = r37131 * r37142;
        double r37144 = cbrt(r37143);
        double r37145 = r37141 + r37144;
        return r37145;
}


double f_of(float g, float h, float a) {
        float r37146 = g;
        float r37147 = 3.3290768654776305e-140;
        bool r37148 = r37146 <= r37147;
        float r37149 = -r37146;
        float r37150 = h;
        float r37151 = r37146 + r37150;
        float r37152 = r37146 - r37150;
        float r37153 = r37151 * r37152;
        float r37154 = sqrt(r37153);
        float r37155 = r37149 + r37154;
        float r37156 = cbrt(r37155);
        float r37157 = a;
        float r37158 = r37157 + r37157;
        float r37159 = cbrt(r37158);
        float r37160 = r37156 / r37159;
        float r37161 = r37146 * r37146;
        float r37162 = r37152 * r37151;
        float r37163 = r37161 - r37162;
        float r37164 = r37163 / r37155;
        float r37165 = r37164 / r37158;
        float r37166 = cbrt(r37165);
        float r37167 = r37160 + r37166;
        float r37168 = r37155 / r37158;
        float r37169 = cbrt(r37168);
        float r37170 = r37149 - r37154;
        float r37171 = cbrt(r37170);
        float r37172 = r37171 / r37159;
        float r37173 = r37169 + r37172;
        float r37174 = r37148 ? r37167 : r37173;
        return r37174;
}

double f_od(double g, double h, double a) {
        double r37175 = g;
        double r37176 = 3.3290768654776305e-140;
        bool r37177 = r37175 <= r37176;
        double r37178 = -r37175;
        double r37179 = h;
        double r37180 = r37175 + r37179;
        double r37181 = r37175 - r37179;
        double r37182 = r37180 * r37181;
        double r37183 = sqrt(r37182);
        double r37184 = r37178 + r37183;
        double r37185 = cbrt(r37184);
        double r37186 = a;
        double r37187 = r37186 + r37186;
        double r37188 = cbrt(r37187);
        double r37189 = r37185 / r37188;
        double r37190 = r37175 * r37175;
        double r37191 = r37181 * r37180;
        double r37192 = r37190 - r37191;
        double r37193 = r37192 / r37184;
        double r37194 = r37193 / r37187;
        double r37195 = cbrt(r37194);
        double r37196 = r37189 + r37195;
        double r37197 = r37184 / r37187;
        double r37198 = cbrt(r37197);
        double r37199 = r37178 - r37183;
        double r37200 = cbrt(r37199);
        double r37201 = r37200 / r37188;
        double r37202 = r37198 + r37201;
        double r37203 = r37177 ? r37196 : r37202;
        return r37203;
}

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 r37204, r37205, r37206, r37207, r37208, r37209, r37210, r37211, r37212, r37213, r37214, r37215, r37216, r37217, r37218, r37219, r37220, r37221, r37222;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r37204, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37205, "2", 10, MPFR_RNDN);
        mpfr_init(r37206);
        mpfr_init(r37207);
        mpfr_init(r37208);
        mpfr_init(r37209);
        mpfr_init(r37210);
        mpfr_init(r37211);
        mpfr_init(r37212);
        mpfr_init(r37213);
        mpfr_init(r37214);
        mpfr_init(r37215);
        mpfr_init(r37216);
        mpfr_init(r37217);
        mpfr_init(r37218);
        mpfr_init(r37219);
        mpfr_init(r37220);
        mpfr_init(r37221);
        mpfr_init(r37222);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r37206, a, MPFR_RNDN);
        mpfr_mul(r37207, r37205, r37206, MPFR_RNDN);
        mpfr_div(r37208, r37204, r37207, MPFR_RNDN);
        mpfr_set_d(r37209, g, MPFR_RNDN);
        mpfr_neg(r37210, r37209, MPFR_RNDN);
        mpfr_mul(r37211, r37209, r37209, MPFR_RNDN);
        mpfr_set_d(r37212, h, MPFR_RNDN);
        mpfr_mul(r37213, r37212, r37212, MPFR_RNDN);
        mpfr_sub(r37214, r37211, r37213, MPFR_RNDN);
        mpfr_sqrt(r37215, r37214, MPFR_RNDN);
        mpfr_add(r37216, r37210, r37215, MPFR_RNDN);
        mpfr_mul(r37217, r37208, r37216, MPFR_RNDN);
        mpfr_cbrt(r37218, r37217, MPFR_RNDN);
        mpfr_sub(r37219, r37210, r37215, MPFR_RNDN);
        mpfr_mul(r37220, r37208, r37219, MPFR_RNDN);
        mpfr_cbrt(r37221, r37220, MPFR_RNDN);
        mpfr_add(r37222, r37218, r37221, MPFR_RNDN);
        return mpfr_get_d(r37222, MPFR_RNDN);
}

static mpfr_t r37223, r37224, r37225, r37226, r37227, r37228, r37229, r37230, r37231, r37232, r37233, r37234, r37235, r37236, r37237, r37238, r37239, r37240, r37241, r37242, r37243, r37244, r37245, r37246, r37247, r37248, r37249, r37250, r37251;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37223);
        mpfr_init_set_str(r37224, "3.3290768654776305e-140", 10, MPFR_RNDN);
        mpfr_init(r37225);
        mpfr_init(r37226);
        mpfr_init(r37227);
        mpfr_init(r37228);
        mpfr_init(r37229);
        mpfr_init(r37230);
        mpfr_init(r37231);
        mpfr_init(r37232);
        mpfr_init(r37233);
        mpfr_init(r37234);
        mpfr_init(r37235);
        mpfr_init(r37236);
        mpfr_init(r37237);
        mpfr_init(r37238);
        mpfr_init(r37239);
        mpfr_init(r37240);
        mpfr_init(r37241);
        mpfr_init(r37242);
        mpfr_init(r37243);
        mpfr_init(r37244);
        mpfr_init(r37245);
        mpfr_init(r37246);
        mpfr_init(r37247);
        mpfr_init(r37248);
        mpfr_init(r37249);
        mpfr_init(r37250);
        mpfr_init(r37251);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r37223, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37225, mpfr_cmp(r37223, r37224) <= 0, MPFR_RNDN);
        mpfr_neg(r37226, r37223, MPFR_RNDN);
        mpfr_set_d(r37227, h, MPFR_RNDN);
        mpfr_add(r37228, r37223, r37227, MPFR_RNDN);
        mpfr_sub(r37229, r37223, r37227, MPFR_RNDN);
        mpfr_mul(r37230, r37228, r37229, MPFR_RNDN);
        mpfr_sqrt(r37231, r37230, MPFR_RNDN);
        mpfr_add(r37232, r37226, r37231, MPFR_RNDN);
        mpfr_cbrt(r37233, r37232, MPFR_RNDN);
        mpfr_set_d(r37234, a, MPFR_RNDN);
        mpfr_add(r37235, r37234, r37234, MPFR_RNDN);
        mpfr_cbrt(r37236, r37235, MPFR_RNDN);
        mpfr_div(r37237, r37233, r37236, MPFR_RNDN);
        mpfr_mul(r37238, r37223, r37223, MPFR_RNDN);
        mpfr_mul(r37239, r37229, r37228, MPFR_RNDN);
        mpfr_sub(r37240, r37238, r37239, MPFR_RNDN);
        mpfr_div(r37241, r37240, r37232, MPFR_RNDN);
        mpfr_div(r37242, r37241, r37235, MPFR_RNDN);
        mpfr_cbrt(r37243, r37242, MPFR_RNDN);
        mpfr_add(r37244, r37237, r37243, MPFR_RNDN);
        mpfr_div(r37245, r37232, r37235, MPFR_RNDN);
        mpfr_cbrt(r37246, r37245, MPFR_RNDN);
        mpfr_sub(r37247, r37226, r37231, MPFR_RNDN);
        mpfr_cbrt(r37248, r37247, MPFR_RNDN);
        mpfr_div(r37249, r37248, r37236, MPFR_RNDN);
        mpfr_add(r37250, r37246, r37249, MPFR_RNDN);
        if (mpfr_get_si(r37225, MPFR_RNDN)) { mpfr_set(r37251, r37244, MPFR_RNDN); } else { mpfr_set(r37251, r37250, MPFR_RNDN); };
        return mpfr_get_d(r37251, MPFR_RNDN);
}

static mpfr_t r37252, r37253, r37254, r37255, r37256, r37257, r37258, r37259, r37260, r37261, r37262, r37263, r37264, r37265, r37266, r37267, r37268, r37269, r37270, r37271, r37272, r37273, r37274, r37275, r37276, r37277, r37278, r37279, r37280;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37252);
        mpfr_init_set_str(r37253, "3.3290768654776305e-140", 10, MPFR_RNDN);
        mpfr_init(r37254);
        mpfr_init(r37255);
        mpfr_init(r37256);
        mpfr_init(r37257);
        mpfr_init(r37258);
        mpfr_init(r37259);
        mpfr_init(r37260);
        mpfr_init(r37261);
        mpfr_init(r37262);
        mpfr_init(r37263);
        mpfr_init(r37264);
        mpfr_init(r37265);
        mpfr_init(r37266);
        mpfr_init(r37267);
        mpfr_init(r37268);
        mpfr_init(r37269);
        mpfr_init(r37270);
        mpfr_init(r37271);
        mpfr_init(r37272);
        mpfr_init(r37273);
        mpfr_init(r37274);
        mpfr_init(r37275);
        mpfr_init(r37276);
        mpfr_init(r37277);
        mpfr_init(r37278);
        mpfr_init(r37279);
        mpfr_init(r37280);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r37252, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37254, mpfr_cmp(r37252, r37253) <= 0, MPFR_RNDN);
        mpfr_neg(r37255, r37252, MPFR_RNDN);
        mpfr_set_d(r37256, h, MPFR_RNDN);
        mpfr_add(r37257, r37252, r37256, MPFR_RNDN);
        mpfr_sub(r37258, r37252, r37256, MPFR_RNDN);
        mpfr_mul(r37259, r37257, r37258, MPFR_RNDN);
        mpfr_sqrt(r37260, r37259, MPFR_RNDN);
        mpfr_add(r37261, r37255, r37260, MPFR_RNDN);
        mpfr_cbrt(r37262, r37261, MPFR_RNDN);
        mpfr_set_d(r37263, a, MPFR_RNDN);
        mpfr_add(r37264, r37263, r37263, MPFR_RNDN);
        mpfr_cbrt(r37265, r37264, MPFR_RNDN);
        mpfr_div(r37266, r37262, r37265, MPFR_RNDN);
        mpfr_mul(r37267, r37252, r37252, MPFR_RNDN);
        mpfr_mul(r37268, r37258, r37257, MPFR_RNDN);
        mpfr_sub(r37269, r37267, r37268, MPFR_RNDN);
        mpfr_div(r37270, r37269, r37261, MPFR_RNDN);
        mpfr_div(r37271, r37270, r37264, MPFR_RNDN);
        mpfr_cbrt(r37272, r37271, MPFR_RNDN);
        mpfr_add(r37273, r37266, r37272, MPFR_RNDN);
        mpfr_div(r37274, r37261, r37264, MPFR_RNDN);
        mpfr_cbrt(r37275, r37274, MPFR_RNDN);
        mpfr_sub(r37276, r37255, r37260, MPFR_RNDN);
        mpfr_cbrt(r37277, r37276, MPFR_RNDN);
        mpfr_div(r37278, r37277, r37265, MPFR_RNDN);
        mpfr_add(r37279, r37275, r37278, MPFR_RNDN);
        if (mpfr_get_si(r37254, MPFR_RNDN)) { mpfr_set(r37280, r37273, MPFR_RNDN); } else { mpfr_set(r37280, r37279, MPFR_RNDN); };
        return mpfr_get_d(r37280, MPFR_RNDN);
}

