#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 r37220 = 1;
        float r37221 = 2;
        float r37222 = a;
        float r37223 = r37221 * r37222;
        float r37224 = r37220 / r37223;
        float r37225 = g;
        float r37226 = -r37225;
        float r37227 = r37225 * r37225;
        float r37228 = h;
        float r37229 = r37228 * r37228;
        float r37230 = r37227 - r37229;
        float r37231 = sqrt(r37230);
        float r37232 = r37226 + r37231;
        float r37233 = r37224 * r37232;
        float r37234 = cbrt(r37233);
        float r37235 = r37226 - r37231;
        float r37236 = r37224 * r37235;
        float r37237 = cbrt(r37236);
        float r37238 = r37234 + r37237;
        return r37238;
}

double f_id(double g, double h, double a) {
        double r37239 = 1;
        double r37240 = 2;
        double r37241 = a;
        double r37242 = r37240 * r37241;
        double r37243 = r37239 / r37242;
        double r37244 = g;
        double r37245 = -r37244;
        double r37246 = r37244 * r37244;
        double r37247 = h;
        double r37248 = r37247 * r37247;
        double r37249 = r37246 - r37248;
        double r37250 = sqrt(r37249);
        double r37251 = r37245 + r37250;
        double r37252 = r37243 * r37251;
        double r37253 = cbrt(r37252);
        double r37254 = r37245 - r37250;
        double r37255 = r37243 * r37254;
        double r37256 = cbrt(r37255);
        double r37257 = r37253 + r37256;
        return r37257;
}


double f_of(float g, float h, float a) {
        float r37258 = g;
        float r37259 = 1.330799445697389e-162;
        bool r37260 = r37258 <= r37259;
        float r37261 = -r37258;
        float r37262 = h;
        float r37263 = r37258 + r37262;
        float r37264 = r37258 - r37262;
        float r37265 = r37263 * r37264;
        float r37266 = sqrt(r37265);
        float r37267 = r37261 + r37266;
        float r37268 = cbrt(r37267);
        float r37269 = a;
        float r37270 = r37269 + r37269;
        float r37271 = cbrt(r37270);
        float r37272 = r37268 / r37271;
        float r37273 = r37258 * r37258;
        float r37274 = r37264 * r37263;
        float r37275 = r37273 - r37274;
        float r37276 = r37275 / r37267;
        float r37277 = r37276 / r37270;
        float r37278 = cbrt(r37277);
        float r37279 = r37272 + r37278;
        float r37280 = r37267 / r37270;
        float r37281 = cbrt(r37280);
        float r37282 = r37261 - r37266;
        float r37283 = cbrt(r37282);
        float r37284 = r37283 / r37271;
        float r37285 = r37281 + r37284;
        float r37286 = r37260 ? r37279 : r37285;
        return r37286;
}

double f_od(double g, double h, double a) {
        double r37287 = g;
        double r37288 = 1.330799445697389e-162;
        bool r37289 = r37287 <= r37288;
        double r37290 = -r37287;
        double r37291 = h;
        double r37292 = r37287 + r37291;
        double r37293 = r37287 - r37291;
        double r37294 = r37292 * r37293;
        double r37295 = sqrt(r37294);
        double r37296 = r37290 + r37295;
        double r37297 = cbrt(r37296);
        double r37298 = a;
        double r37299 = r37298 + r37298;
        double r37300 = cbrt(r37299);
        double r37301 = r37297 / r37300;
        double r37302 = r37287 * r37287;
        double r37303 = r37293 * r37292;
        double r37304 = r37302 - r37303;
        double r37305 = r37304 / r37296;
        double r37306 = r37305 / r37299;
        double r37307 = cbrt(r37306);
        double r37308 = r37301 + r37307;
        double r37309 = r37296 / r37299;
        double r37310 = cbrt(r37309);
        double r37311 = r37290 - r37295;
        double r37312 = cbrt(r37311);
        double r37313 = r37312 / r37300;
        double r37314 = r37310 + r37313;
        double r37315 = r37289 ? r37308 : r37314;
        return r37315;
}

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 r37316, r37317, r37318, r37319, r37320, r37321, r37322, r37323, r37324, r37325, r37326, r37327, r37328, r37329, r37330, r37331, r37332, r37333, r37334;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r37316, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37317, "2", 10, MPFR_RNDN);
        mpfr_init(r37318);
        mpfr_init(r37319);
        mpfr_init(r37320);
        mpfr_init(r37321);
        mpfr_init(r37322);
        mpfr_init(r37323);
        mpfr_init(r37324);
        mpfr_init(r37325);
        mpfr_init(r37326);
        mpfr_init(r37327);
        mpfr_init(r37328);
        mpfr_init(r37329);
        mpfr_init(r37330);
        mpfr_init(r37331);
        mpfr_init(r37332);
        mpfr_init(r37333);
        mpfr_init(r37334);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r37318, a, MPFR_RNDN);
        mpfr_mul(r37319, r37317, r37318, MPFR_RNDN);
        mpfr_div(r37320, r37316, r37319, MPFR_RNDN);
        mpfr_set_d(r37321, g, MPFR_RNDN);
        mpfr_neg(r37322, r37321, MPFR_RNDN);
        mpfr_mul(r37323, r37321, r37321, MPFR_RNDN);
        mpfr_set_d(r37324, h, MPFR_RNDN);
        mpfr_mul(r37325, r37324, r37324, MPFR_RNDN);
        mpfr_sub(r37326, r37323, r37325, MPFR_RNDN);
        mpfr_sqrt(r37327, r37326, MPFR_RNDN);
        mpfr_add(r37328, r37322, r37327, MPFR_RNDN);
        mpfr_mul(r37329, r37320, r37328, MPFR_RNDN);
        mpfr_cbrt(r37330, r37329, MPFR_RNDN);
        mpfr_sub(r37331, r37322, r37327, MPFR_RNDN);
        mpfr_mul(r37332, r37320, r37331, MPFR_RNDN);
        mpfr_cbrt(r37333, r37332, MPFR_RNDN);
        mpfr_add(r37334, r37330, r37333, MPFR_RNDN);
        return mpfr_get_d(r37334, MPFR_RNDN);
}

static mpfr_t r37335, r37336, r37337, r37338, r37339, r37340, r37341, r37342, r37343, r37344, r37345, r37346, r37347, r37348, r37349, r37350, r37351, r37352, r37353, r37354, r37355, r37356, r37357, r37358, r37359, r37360, r37361, r37362, r37363;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37335);
        mpfr_init_set_str(r37336, "1.330799445697389e-162", 10, MPFR_RNDN);
        mpfr_init(r37337);
        mpfr_init(r37338);
        mpfr_init(r37339);
        mpfr_init(r37340);
        mpfr_init(r37341);
        mpfr_init(r37342);
        mpfr_init(r37343);
        mpfr_init(r37344);
        mpfr_init(r37345);
        mpfr_init(r37346);
        mpfr_init(r37347);
        mpfr_init(r37348);
        mpfr_init(r37349);
        mpfr_init(r37350);
        mpfr_init(r37351);
        mpfr_init(r37352);
        mpfr_init(r37353);
        mpfr_init(r37354);
        mpfr_init(r37355);
        mpfr_init(r37356);
        mpfr_init(r37357);
        mpfr_init(r37358);
        mpfr_init(r37359);
        mpfr_init(r37360);
        mpfr_init(r37361);
        mpfr_init(r37362);
        mpfr_init(r37363);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r37335, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37337, mpfr_cmp(r37335, r37336) <= 0, MPFR_RNDN);
        mpfr_neg(r37338, r37335, MPFR_RNDN);
        mpfr_set_d(r37339, h, MPFR_RNDN);
        mpfr_add(r37340, r37335, r37339, MPFR_RNDN);
        mpfr_sub(r37341, r37335, r37339, MPFR_RNDN);
        mpfr_mul(r37342, r37340, r37341, MPFR_RNDN);
        mpfr_sqrt(r37343, r37342, MPFR_RNDN);
        mpfr_add(r37344, r37338, r37343, MPFR_RNDN);
        mpfr_cbrt(r37345, r37344, MPFR_RNDN);
        mpfr_set_d(r37346, a, MPFR_RNDN);
        mpfr_add(r37347, r37346, r37346, MPFR_RNDN);
        mpfr_cbrt(r37348, r37347, MPFR_RNDN);
        mpfr_div(r37349, r37345, r37348, MPFR_RNDN);
        mpfr_mul(r37350, r37335, r37335, MPFR_RNDN);
        mpfr_mul(r37351, r37341, r37340, MPFR_RNDN);
        mpfr_sub(r37352, r37350, r37351, MPFR_RNDN);
        mpfr_div(r37353, r37352, r37344, MPFR_RNDN);
        mpfr_div(r37354, r37353, r37347, MPFR_RNDN);
        mpfr_cbrt(r37355, r37354, MPFR_RNDN);
        mpfr_add(r37356, r37349, r37355, MPFR_RNDN);
        mpfr_div(r37357, r37344, r37347, MPFR_RNDN);
        mpfr_cbrt(r37358, r37357, MPFR_RNDN);
        mpfr_sub(r37359, r37338, r37343, MPFR_RNDN);
        mpfr_cbrt(r37360, r37359, MPFR_RNDN);
        mpfr_div(r37361, r37360, r37348, MPFR_RNDN);
        mpfr_add(r37362, r37358, r37361, MPFR_RNDN);
        if (mpfr_get_si(r37337, MPFR_RNDN)) { mpfr_set(r37363, r37356, MPFR_RNDN); } else { mpfr_set(r37363, r37362, MPFR_RNDN); };
        return mpfr_get_d(r37363, MPFR_RNDN);
}

static mpfr_t r37364, r37365, r37366, r37367, r37368, r37369, r37370, r37371, r37372, r37373, r37374, r37375, r37376, r37377, r37378, r37379, r37380, r37381, r37382, r37383, r37384, r37385, r37386, r37387, r37388, r37389, r37390, r37391, r37392;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37364);
        mpfr_init_set_str(r37365, "1.330799445697389e-162", 10, MPFR_RNDN);
        mpfr_init(r37366);
        mpfr_init(r37367);
        mpfr_init(r37368);
        mpfr_init(r37369);
        mpfr_init(r37370);
        mpfr_init(r37371);
        mpfr_init(r37372);
        mpfr_init(r37373);
        mpfr_init(r37374);
        mpfr_init(r37375);
        mpfr_init(r37376);
        mpfr_init(r37377);
        mpfr_init(r37378);
        mpfr_init(r37379);
        mpfr_init(r37380);
        mpfr_init(r37381);
        mpfr_init(r37382);
        mpfr_init(r37383);
        mpfr_init(r37384);
        mpfr_init(r37385);
        mpfr_init(r37386);
        mpfr_init(r37387);
        mpfr_init(r37388);
        mpfr_init(r37389);
        mpfr_init(r37390);
        mpfr_init(r37391);
        mpfr_init(r37392);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r37364, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37366, mpfr_cmp(r37364, r37365) <= 0, MPFR_RNDN);
        mpfr_neg(r37367, r37364, MPFR_RNDN);
        mpfr_set_d(r37368, h, MPFR_RNDN);
        mpfr_add(r37369, r37364, r37368, MPFR_RNDN);
        mpfr_sub(r37370, r37364, r37368, MPFR_RNDN);
        mpfr_mul(r37371, r37369, r37370, MPFR_RNDN);
        mpfr_sqrt(r37372, r37371, MPFR_RNDN);
        mpfr_add(r37373, r37367, r37372, MPFR_RNDN);
        mpfr_cbrt(r37374, r37373, MPFR_RNDN);
        mpfr_set_d(r37375, a, MPFR_RNDN);
        mpfr_add(r37376, r37375, r37375, MPFR_RNDN);
        mpfr_cbrt(r37377, r37376, MPFR_RNDN);
        mpfr_div(r37378, r37374, r37377, MPFR_RNDN);
        mpfr_mul(r37379, r37364, r37364, MPFR_RNDN);
        mpfr_mul(r37380, r37370, r37369, MPFR_RNDN);
        mpfr_sub(r37381, r37379, r37380, MPFR_RNDN);
        mpfr_div(r37382, r37381, r37373, MPFR_RNDN);
        mpfr_div(r37383, r37382, r37376, MPFR_RNDN);
        mpfr_cbrt(r37384, r37383, MPFR_RNDN);
        mpfr_add(r37385, r37378, r37384, MPFR_RNDN);
        mpfr_div(r37386, r37373, r37376, MPFR_RNDN);
        mpfr_cbrt(r37387, r37386, MPFR_RNDN);
        mpfr_sub(r37388, r37367, r37372, MPFR_RNDN);
        mpfr_cbrt(r37389, r37388, MPFR_RNDN);
        mpfr_div(r37390, r37389, r37377, MPFR_RNDN);
        mpfr_add(r37391, r37387, r37390, MPFR_RNDN);
        if (mpfr_get_si(r37366, MPFR_RNDN)) { mpfr_set(r37392, r37385, MPFR_RNDN); } else { mpfr_set(r37392, r37391, MPFR_RNDN); };
        return mpfr_get_d(r37392, MPFR_RNDN);
}

