#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 r23442 = 1;
        float r23443 = 2;
        float r23444 = a;
        float r23445 = r23443 * r23444;
        float r23446 = r23442 / r23445;
        float r23447 = g;
        float r23448 = -r23447;
        float r23449 = r23447 * r23447;
        float r23450 = h;
        float r23451 = r23450 * r23450;
        float r23452 = r23449 - r23451;
        float r23453 = sqrt(r23452);
        float r23454 = r23448 + r23453;
        float r23455 = r23446 * r23454;
        float r23456 = cbrt(r23455);
        float r23457 = r23448 - r23453;
        float r23458 = r23446 * r23457;
        float r23459 = cbrt(r23458);
        float r23460 = r23456 + r23459;
        return r23460;
}

double f_id(double g, double h, double a) {
        double r23461 = 1;
        double r23462 = 2;
        double r23463 = a;
        double r23464 = r23462 * r23463;
        double r23465 = r23461 / r23464;
        double r23466 = g;
        double r23467 = -r23466;
        double r23468 = r23466 * r23466;
        double r23469 = h;
        double r23470 = r23469 * r23469;
        double r23471 = r23468 - r23470;
        double r23472 = sqrt(r23471);
        double r23473 = r23467 + r23472;
        double r23474 = r23465 * r23473;
        double r23475 = cbrt(r23474);
        double r23476 = r23467 - r23472;
        double r23477 = r23465 * r23476;
        double r23478 = cbrt(r23477);
        double r23479 = r23475 + r23478;
        return r23479;
}


double f_of(float g, float h, float a) {
        float r23480 = g;
        float r23481 = -1.572083084738699e-162;
        bool r23482 = r23480 <= r23481;
        float r23483 = 1;
        float r23484 = 2;
        float r23485 = a;
        float r23486 = r23484 * r23485;
        float r23487 = r23483 / r23486;
        float r23488 = -r23480;
        float r23489 = r23480 * r23480;
        float r23490 = h;
        float r23491 = r23490 * r23490;
        float r23492 = r23489 - r23491;
        float r23493 = sqrt(r23492);
        float r23494 = r23488 + r23493;
        float r23495 = r23487 * r23494;
        float r23496 = cbrt(r23495);
        float r23497 = r23491 / r23494;
        float r23498 = r23487 * r23497;
        float r23499 = cbrt(r23498);
        float r23500 = r23496 + r23499;
        float r23501 = r23488 - r23493;
        float r23502 = r23491 / r23501;
        float r23503 = r23487 * r23502;
        float r23504 = cbrt(r23503);
        float r23505 = r23487 * r23501;
        float r23506 = cbrt(r23505);
        float r23507 = r23504 + r23506;
        float r23508 = r23482 ? r23500 : r23507;
        return r23508;
}

double f_od(double g, double h, double a) {
        double r23509 = g;
        double r23510 = -1.572083084738699e-162;
        bool r23511 = r23509 <= r23510;
        double r23512 = 1;
        double r23513 = 2;
        double r23514 = a;
        double r23515 = r23513 * r23514;
        double r23516 = r23512 / r23515;
        double r23517 = -r23509;
        double r23518 = r23509 * r23509;
        double r23519 = h;
        double r23520 = r23519 * r23519;
        double r23521 = r23518 - r23520;
        double r23522 = sqrt(r23521);
        double r23523 = r23517 + r23522;
        double r23524 = r23516 * r23523;
        double r23525 = cbrt(r23524);
        double r23526 = r23520 / r23523;
        double r23527 = r23516 * r23526;
        double r23528 = cbrt(r23527);
        double r23529 = r23525 + r23528;
        double r23530 = r23517 - r23522;
        double r23531 = r23520 / r23530;
        double r23532 = r23516 * r23531;
        double r23533 = cbrt(r23532);
        double r23534 = r23516 * r23530;
        double r23535 = cbrt(r23534);
        double r23536 = r23533 + r23535;
        double r23537 = r23511 ? r23529 : r23536;
        return r23537;
}

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 r23538, r23539, r23540, r23541, r23542, r23543, r23544, r23545, r23546, r23547, r23548, r23549, r23550, r23551, r23552, r23553, r23554, r23555, r23556;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(656);
        mpfr_init_set_str(r23538, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r23539, "2", 10, MPFR_RNDN);
        mpfr_init(r23540);
        mpfr_init(r23541);
        mpfr_init(r23542);
        mpfr_init(r23543);
        mpfr_init(r23544);
        mpfr_init(r23545);
        mpfr_init(r23546);
        mpfr_init(r23547);
        mpfr_init(r23548);
        mpfr_init(r23549);
        mpfr_init(r23550);
        mpfr_init(r23551);
        mpfr_init(r23552);
        mpfr_init(r23553);
        mpfr_init(r23554);
        mpfr_init(r23555);
        mpfr_init(r23556);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r23540, a, MPFR_RNDN);
        mpfr_mul(r23541, r23539, r23540, MPFR_RNDN);
        mpfr_div(r23542, r23538, r23541, MPFR_RNDN);
        mpfr_set_d(r23543, g, MPFR_RNDN);
        mpfr_neg(r23544, r23543, MPFR_RNDN);
        mpfr_mul(r23545, r23543, r23543, MPFR_RNDN);
        mpfr_set_d(r23546, h, MPFR_RNDN);
        mpfr_mul(r23547, r23546, r23546, MPFR_RNDN);
        mpfr_sub(r23548, r23545, r23547, MPFR_RNDN);
        mpfr_sqrt(r23549, r23548, MPFR_RNDN);
        mpfr_add(r23550, r23544, r23549, MPFR_RNDN);
        mpfr_mul(r23551, r23542, r23550, MPFR_RNDN);
        mpfr_cbrt(r23552, r23551, MPFR_RNDN);
        mpfr_sub(r23553, r23544, r23549, MPFR_RNDN);
        mpfr_mul(r23554, r23542, r23553, MPFR_RNDN);
        mpfr_cbrt(r23555, r23554, MPFR_RNDN);
        mpfr_add(r23556, r23552, r23555, MPFR_RNDN);
        return mpfr_get_d(r23556, MPFR_RNDN);
}

static mpfr_t r23557, r23558, r23559, r23560, r23561, r23562, r23563, r23564, r23565, r23566, r23567, r23568, r23569, r23570, r23571, r23572, r23573, r23574, r23575, r23576, r23577, r23578, r23579, r23580, r23581, r23582, r23583, r23584, r23585;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(656);
        mpfr_init(r23557);
        mpfr_init_set_str(r23558, "-1.572083084738699e-162", 10, MPFR_RNDN);
        mpfr_init(r23559);
        mpfr_init_set_str(r23560, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r23561, "2", 10, MPFR_RNDN);
        mpfr_init(r23562);
        mpfr_init(r23563);
        mpfr_init(r23564);
        mpfr_init(r23565);
        mpfr_init(r23566);
        mpfr_init(r23567);
        mpfr_init(r23568);
        mpfr_init(r23569);
        mpfr_init(r23570);
        mpfr_init(r23571);
        mpfr_init(r23572);
        mpfr_init(r23573);
        mpfr_init(r23574);
        mpfr_init(r23575);
        mpfr_init(r23576);
        mpfr_init(r23577);
        mpfr_init(r23578);
        mpfr_init(r23579);
        mpfr_init(r23580);
        mpfr_init(r23581);
        mpfr_init(r23582);
        mpfr_init(r23583);
        mpfr_init(r23584);
        mpfr_init(r23585);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r23557, g, MPFR_RNDN);
        ;
        mpfr_set_si(r23559, mpfr_cmp(r23557, r23558) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r23562, a, MPFR_RNDN);
        mpfr_mul(r23563, r23561, r23562, MPFR_RNDN);
        mpfr_div(r23564, r23560, r23563, MPFR_RNDN);
        mpfr_neg(r23565, r23557, MPFR_RNDN);
        mpfr_mul(r23566, r23557, r23557, MPFR_RNDN);
        mpfr_set_d(r23567, h, MPFR_RNDN);
        mpfr_mul(r23568, r23567, r23567, MPFR_RNDN);
        mpfr_sub(r23569, r23566, r23568, MPFR_RNDN);
        mpfr_sqrt(r23570, r23569, MPFR_RNDN);
        mpfr_add(r23571, r23565, r23570, MPFR_RNDN);
        mpfr_mul(r23572, r23564, r23571, MPFR_RNDN);
        mpfr_cbrt(r23573, r23572, MPFR_RNDN);
        mpfr_div(r23574, r23568, r23571, MPFR_RNDN);
        mpfr_mul(r23575, r23564, r23574, MPFR_RNDN);
        mpfr_cbrt(r23576, r23575, MPFR_RNDN);
        mpfr_add(r23577, r23573, r23576, MPFR_RNDN);
        mpfr_sub(r23578, r23565, r23570, MPFR_RNDN);
        mpfr_div(r23579, r23568, r23578, MPFR_RNDN);
        mpfr_mul(r23580, r23564, r23579, MPFR_RNDN);
        mpfr_cbrt(r23581, r23580, MPFR_RNDN);
        mpfr_mul(r23582, r23564, r23578, MPFR_RNDN);
        mpfr_cbrt(r23583, r23582, MPFR_RNDN);
        mpfr_add(r23584, r23581, r23583, MPFR_RNDN);
        if (mpfr_get_si(r23559, MPFR_RNDN)) { mpfr_set(r23585, r23577, MPFR_RNDN); } else { mpfr_set(r23585, r23584, MPFR_RNDN); };
        return mpfr_get_d(r23585, MPFR_RNDN);
}

static mpfr_t r23586, r23587, r23588, r23589, r23590, r23591, r23592, r23593, r23594, r23595, r23596, r23597, r23598, r23599, r23600, r23601, r23602, r23603, r23604, r23605, r23606, r23607, r23608, r23609, r23610, r23611, r23612, r23613, r23614;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(656);
        mpfr_init(r23586);
        mpfr_init_set_str(r23587, "-1.572083084738699e-162", 10, MPFR_RNDN);
        mpfr_init(r23588);
        mpfr_init_set_str(r23589, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r23590, "2", 10, MPFR_RNDN);
        mpfr_init(r23591);
        mpfr_init(r23592);
        mpfr_init(r23593);
        mpfr_init(r23594);
        mpfr_init(r23595);
        mpfr_init(r23596);
        mpfr_init(r23597);
        mpfr_init(r23598);
        mpfr_init(r23599);
        mpfr_init(r23600);
        mpfr_init(r23601);
        mpfr_init(r23602);
        mpfr_init(r23603);
        mpfr_init(r23604);
        mpfr_init(r23605);
        mpfr_init(r23606);
        mpfr_init(r23607);
        mpfr_init(r23608);
        mpfr_init(r23609);
        mpfr_init(r23610);
        mpfr_init(r23611);
        mpfr_init(r23612);
        mpfr_init(r23613);
        mpfr_init(r23614);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r23586, g, MPFR_RNDN);
        ;
        mpfr_set_si(r23588, mpfr_cmp(r23586, r23587) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_set_d(r23591, a, MPFR_RNDN);
        mpfr_mul(r23592, r23590, r23591, MPFR_RNDN);
        mpfr_div(r23593, r23589, r23592, MPFR_RNDN);
        mpfr_neg(r23594, r23586, MPFR_RNDN);
        mpfr_mul(r23595, r23586, r23586, MPFR_RNDN);
        mpfr_set_d(r23596, h, MPFR_RNDN);
        mpfr_mul(r23597, r23596, r23596, MPFR_RNDN);
        mpfr_sub(r23598, r23595, r23597, MPFR_RNDN);
        mpfr_sqrt(r23599, r23598, MPFR_RNDN);
        mpfr_add(r23600, r23594, r23599, MPFR_RNDN);
        mpfr_mul(r23601, r23593, r23600, MPFR_RNDN);
        mpfr_cbrt(r23602, r23601, MPFR_RNDN);
        mpfr_div(r23603, r23597, r23600, MPFR_RNDN);
        mpfr_mul(r23604, r23593, r23603, MPFR_RNDN);
        mpfr_cbrt(r23605, r23604, MPFR_RNDN);
        mpfr_add(r23606, r23602, r23605, MPFR_RNDN);
        mpfr_sub(r23607, r23594, r23599, MPFR_RNDN);
        mpfr_div(r23608, r23597, r23607, MPFR_RNDN);
        mpfr_mul(r23609, r23593, r23608, MPFR_RNDN);
        mpfr_cbrt(r23610, r23609, MPFR_RNDN);
        mpfr_mul(r23611, r23593, r23607, MPFR_RNDN);
        mpfr_cbrt(r23612, r23611, MPFR_RNDN);
        mpfr_add(r23613, r23610, r23612, MPFR_RNDN);
        if (mpfr_get_si(r23588, MPFR_RNDN)) { mpfr_set(r23614, r23606, MPFR_RNDN); } else { mpfr_set(r23614, r23613, MPFR_RNDN); };
        return mpfr_get_d(r23614, MPFR_RNDN);
}

