#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 r37231 = 1;
        float r37232 = 2;
        float r37233 = a;
        float r37234 = r37232 * r37233;
        float r37235 = r37231 / r37234;
        float r37236 = g;
        float r37237 = -r37236;
        float r37238 = r37236 * r37236;
        float r37239 = h;
        float r37240 = r37239 * r37239;
        float r37241 = r37238 - r37240;
        float r37242 = sqrt(r37241);
        float r37243 = r37237 + r37242;
        float r37244 = r37235 * r37243;
        float r37245 = cbrt(r37244);
        float r37246 = r37237 - r37242;
        float r37247 = r37235 * r37246;
        float r37248 = cbrt(r37247);
        float r37249 = r37245 + r37248;
        return r37249;
}

double f_id(double g, double h, double a) {
        double r37250 = 1;
        double r37251 = 2;
        double r37252 = a;
        double r37253 = r37251 * r37252;
        double r37254 = r37250 / r37253;
        double r37255 = g;
        double r37256 = -r37255;
        double r37257 = r37255 * r37255;
        double r37258 = h;
        double r37259 = r37258 * r37258;
        double r37260 = r37257 - r37259;
        double r37261 = sqrt(r37260);
        double r37262 = r37256 + r37261;
        double r37263 = r37254 * r37262;
        double r37264 = cbrt(r37263);
        double r37265 = r37256 - r37261;
        double r37266 = r37254 * r37265;
        double r37267 = cbrt(r37266);
        double r37268 = r37264 + r37267;
        return r37268;
}


double f_of(float g, float h, float a) {
        float r37269 = g;
        float r37270 = 1.330799445697389e-162;
        bool r37271 = r37269 <= r37270;
        float r37272 = -r37269;
        float r37273 = h;
        float r37274 = r37269 + r37273;
        float r37275 = r37269 - r37273;
        float r37276 = r37274 * r37275;
        float r37277 = sqrt(r37276);
        float r37278 = r37272 + r37277;
        float r37279 = cbrt(r37278);
        float r37280 = a;
        float r37281 = r37280 + r37280;
        float r37282 = cbrt(r37281);
        float r37283 = r37279 / r37282;
        float r37284 = r37269 * r37269;
        float r37285 = r37275 * r37274;
        float r37286 = r37284 - r37285;
        float r37287 = r37286 / r37278;
        float r37288 = r37287 / r37281;
        float r37289 = cbrt(r37288);
        float r37290 = r37283 + r37289;
        float r37291 = r37278 / r37281;
        float r37292 = cbrt(r37291);
        float r37293 = r37272 - r37277;
        float r37294 = cbrt(r37293);
        float r37295 = r37294 / r37282;
        float r37296 = r37292 + r37295;
        float r37297 = r37271 ? r37290 : r37296;
        return r37297;
}

double f_od(double g, double h, double a) {
        double r37298 = g;
        double r37299 = 1.330799445697389e-162;
        bool r37300 = r37298 <= r37299;
        double r37301 = -r37298;
        double r37302 = h;
        double r37303 = r37298 + r37302;
        double r37304 = r37298 - r37302;
        double r37305 = r37303 * r37304;
        double r37306 = sqrt(r37305);
        double r37307 = r37301 + r37306;
        double r37308 = cbrt(r37307);
        double r37309 = a;
        double r37310 = r37309 + r37309;
        double r37311 = cbrt(r37310);
        double r37312 = r37308 / r37311;
        double r37313 = r37298 * r37298;
        double r37314 = r37304 * r37303;
        double r37315 = r37313 - r37314;
        double r37316 = r37315 / r37307;
        double r37317 = r37316 / r37310;
        double r37318 = cbrt(r37317);
        double r37319 = r37312 + r37318;
        double r37320 = r37307 / r37310;
        double r37321 = cbrt(r37320);
        double r37322 = r37301 - r37306;
        double r37323 = cbrt(r37322);
        double r37324 = r37323 / r37311;
        double r37325 = r37321 + r37324;
        double r37326 = r37300 ? r37319 : r37325;
        return r37326;
}

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 r37327, r37328, r37329, r37330, r37331, r37332, r37333, r37334, r37335, r37336, r37337, r37338, r37339, r37340, r37341, r37342, r37343, r37344, r37345;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r37327, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37328, "2", 10, MPFR_RNDN);
        mpfr_init(r37329);
        mpfr_init(r37330);
        mpfr_init(r37331);
        mpfr_init(r37332);
        mpfr_init(r37333);
        mpfr_init(r37334);
        mpfr_init(r37335);
        mpfr_init(r37336);
        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);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r37329, a, MPFR_RNDN);
        mpfr_mul(r37330, r37328, r37329, MPFR_RNDN);
        mpfr_div(r37331, r37327, r37330, MPFR_RNDN);
        mpfr_set_d(r37332, g, MPFR_RNDN);
        mpfr_neg(r37333, r37332, MPFR_RNDN);
        mpfr_mul(r37334, r37332, r37332, MPFR_RNDN);
        mpfr_set_d(r37335, h, MPFR_RNDN);
        mpfr_mul(r37336, r37335, r37335, MPFR_RNDN);
        mpfr_sub(r37337, r37334, r37336, MPFR_RNDN);
        mpfr_sqrt(r37338, r37337, MPFR_RNDN);
        mpfr_add(r37339, r37333, r37338, MPFR_RNDN);
        mpfr_mul(r37340, r37331, r37339, MPFR_RNDN);
        mpfr_cbrt(r37341, r37340, MPFR_RNDN);
        mpfr_sub(r37342, r37333, r37338, MPFR_RNDN);
        mpfr_mul(r37343, r37331, r37342, MPFR_RNDN);
        mpfr_cbrt(r37344, r37343, MPFR_RNDN);
        mpfr_add(r37345, r37341, r37344, MPFR_RNDN);
        return mpfr_get_d(r37345, MPFR_RNDN);
}

static mpfr_t r37346, r37347, r37348, r37349, r37350, r37351, r37352, r37353, r37354, r37355, r37356, r37357, r37358, r37359, r37360, r37361, r37362, r37363, r37364, r37365, r37366, r37367, r37368, r37369, r37370, r37371, r37372, r37373, r37374;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37346);
        mpfr_init_set_str(r37347, "1.330799445697389e-162", 10, MPFR_RNDN);
        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);
        mpfr_init(r37364);
        mpfr_init(r37365);
        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);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r37346, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37348, mpfr_cmp(r37346, r37347) <= 0, MPFR_RNDN);
        mpfr_neg(r37349, r37346, MPFR_RNDN);
        mpfr_set_d(r37350, h, MPFR_RNDN);
        mpfr_add(r37351, r37346, r37350, MPFR_RNDN);
        mpfr_sub(r37352, r37346, r37350, MPFR_RNDN);
        mpfr_mul(r37353, r37351, r37352, MPFR_RNDN);
        mpfr_sqrt(r37354, r37353, MPFR_RNDN);
        mpfr_add(r37355, r37349, r37354, MPFR_RNDN);
        mpfr_cbrt(r37356, r37355, MPFR_RNDN);
        mpfr_set_d(r37357, a, MPFR_RNDN);
        mpfr_add(r37358, r37357, r37357, MPFR_RNDN);
        mpfr_cbrt(r37359, r37358, MPFR_RNDN);
        mpfr_div(r37360, r37356, r37359, MPFR_RNDN);
        mpfr_mul(r37361, r37346, r37346, MPFR_RNDN);
        mpfr_mul(r37362, r37352, r37351, MPFR_RNDN);
        mpfr_sub(r37363, r37361, r37362, MPFR_RNDN);
        mpfr_div(r37364, r37363, r37355, MPFR_RNDN);
        mpfr_div(r37365, r37364, r37358, MPFR_RNDN);
        mpfr_cbrt(r37366, r37365, MPFR_RNDN);
        mpfr_add(r37367, r37360, r37366, MPFR_RNDN);
        mpfr_div(r37368, r37355, r37358, MPFR_RNDN);
        mpfr_cbrt(r37369, r37368, MPFR_RNDN);
        mpfr_sub(r37370, r37349, r37354, MPFR_RNDN);
        mpfr_cbrt(r37371, r37370, MPFR_RNDN);
        mpfr_div(r37372, r37371, r37359, MPFR_RNDN);
        mpfr_add(r37373, r37369, r37372, MPFR_RNDN);
        if (mpfr_get_si(r37348, MPFR_RNDN)) { mpfr_set(r37374, r37367, MPFR_RNDN); } else { mpfr_set(r37374, r37373, MPFR_RNDN); };
        return mpfr_get_d(r37374, MPFR_RNDN);
}

static mpfr_t r37375, r37376, r37377, r37378, r37379, r37380, r37381, r37382, r37383, r37384, r37385, r37386, r37387, r37388, r37389, r37390, r37391, r37392, r37393, r37394, r37395, r37396, r37397, r37398, r37399, r37400, r37401, r37402, r37403;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r37375);
        mpfr_init_set_str(r37376, "1.330799445697389e-162", 10, MPFR_RNDN);
        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);
        mpfr_init(r37393);
        mpfr_init(r37394);
        mpfr_init(r37395);
        mpfr_init(r37396);
        mpfr_init(r37397);
        mpfr_init(r37398);
        mpfr_init(r37399);
        mpfr_init(r37400);
        mpfr_init(r37401);
        mpfr_init(r37402);
        mpfr_init(r37403);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r37375, g, MPFR_RNDN);
        ;
        mpfr_set_si(r37377, mpfr_cmp(r37375, r37376) <= 0, MPFR_RNDN);
        mpfr_neg(r37378, r37375, MPFR_RNDN);
        mpfr_set_d(r37379, h, MPFR_RNDN);
        mpfr_add(r37380, r37375, r37379, MPFR_RNDN);
        mpfr_sub(r37381, r37375, r37379, MPFR_RNDN);
        mpfr_mul(r37382, r37380, r37381, MPFR_RNDN);
        mpfr_sqrt(r37383, r37382, MPFR_RNDN);
        mpfr_add(r37384, r37378, r37383, MPFR_RNDN);
        mpfr_cbrt(r37385, r37384, MPFR_RNDN);
        mpfr_set_d(r37386, a, MPFR_RNDN);
        mpfr_add(r37387, r37386, r37386, MPFR_RNDN);
        mpfr_cbrt(r37388, r37387, MPFR_RNDN);
        mpfr_div(r37389, r37385, r37388, MPFR_RNDN);
        mpfr_mul(r37390, r37375, r37375, MPFR_RNDN);
        mpfr_mul(r37391, r37381, r37380, MPFR_RNDN);
        mpfr_sub(r37392, r37390, r37391, MPFR_RNDN);
        mpfr_div(r37393, r37392, r37384, MPFR_RNDN);
        mpfr_div(r37394, r37393, r37387, MPFR_RNDN);
        mpfr_cbrt(r37395, r37394, MPFR_RNDN);
        mpfr_add(r37396, r37389, r37395, MPFR_RNDN);
        mpfr_div(r37397, r37384, r37387, MPFR_RNDN);
        mpfr_cbrt(r37398, r37397, MPFR_RNDN);
        mpfr_sub(r37399, r37378, r37383, MPFR_RNDN);
        mpfr_cbrt(r37400, r37399, MPFR_RNDN);
        mpfr_div(r37401, r37400, r37388, MPFR_RNDN);
        mpfr_add(r37402, r37398, r37401, MPFR_RNDN);
        if (mpfr_get_si(r37377, MPFR_RNDN)) { mpfr_set(r37403, r37396, MPFR_RNDN); } else { mpfr_set(r37403, r37402, MPFR_RNDN); };
        return mpfr_get_d(r37403, MPFR_RNDN);
}

