#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 r10375 = 1.0f;
        float r10376 = 2.0f;
        float r10377 = a;
        float r10378 = r10376 * r10377;
        float r10379 = r10375 / r10378;
        float r10380 = g;
        float r10381 = -r10380;
        float r10382 = r10380 * r10380;
        float r10383 = h;
        float r10384 = r10383 * r10383;
        float r10385 = r10382 - r10384;
        float r10386 = sqrt(r10385);
        float r10387 = r10381 + r10386;
        float r10388 = r10379 * r10387;
        float r10389 = cbrt(r10388);
        float r10390 = r10381 - r10386;
        float r10391 = r10379 * r10390;
        float r10392 = cbrt(r10391);
        float r10393 = r10389 + r10392;
        return r10393;
}

double f_id(double g, double h, double a) {
        double r10394 = 1.0;
        double r10395 = 2.0;
        double r10396 = a;
        double r10397 = r10395 * r10396;
        double r10398 = r10394 / r10397;
        double r10399 = g;
        double r10400 = -r10399;
        double r10401 = r10399 * r10399;
        double r10402 = h;
        double r10403 = r10402 * r10402;
        double r10404 = r10401 - r10403;
        double r10405 = sqrt(r10404);
        double r10406 = r10400 + r10405;
        double r10407 = r10398 * r10406;
        double r10408 = cbrt(r10407);
        double r10409 = r10400 - r10405;
        double r10410 = r10398 * r10409;
        double r10411 = cbrt(r10410);
        double r10412 = r10408 + r10411;
        return r10412;
}


double f_of(float g, float h, float a) {
        float r10413 = g;
        float r10414 = -r10413;
        float r10415 = h;
        float r10416 = r10413 + r10415;
        float r10417 = r10413 - r10415;
        float r10418 = r10416 * r10417;
        float r10419 = sqrt(r10418);
        float r10420 = r10414 - r10419;
        float r10421 = cbrt(r10420);
        float r10422 = a;
        float r10423 = 2.0f;
        float r10424 = r10422 * r10423;
        float r10425 = cbrt(r10424);
        float r10426 = r10421 / r10425;
        float r10427 = r10414 + r10413;
        float r10428 = cbrt(r10427);
        float r10429 = 1.0f;
        float r10430 = r10429 / r10424;
        float r10431 = cbrt(r10430);
        float r10432 = r10428 * r10431;
        float r10433 = r10426 + r10432;
        float r10434 = -4.644802488352878e-113f;
        bool r10435 = r10433 <= r10434;
        float r10436 = 3.1391489186073185e-117f;
        bool r10437 = r10433 <= r10436;
        float r10438 = r10413 * r10413;
        float r10439 = r10415 * r10415;
        float r10440 = r10438 - r10439;
        float r10441 = sqrt(r10440);
        float r10442 = r10414 - r10441;
        float r10443 = r10442 * r10430;
        float r10444 = cbrt(r10443);
        float r10445 = r10413 + r10413;
        float r10446 = -r10445;
        float r10447 = cbrt(r10446);
        float r10448 = r10447 * r10431;
        float r10449 = r10444 + r10448;
        float r10450 = cbrt(r10442);
        float r10451 = r10431 * r10450;
        float r10452 = r10441 + r10414;
        float r10453 = cbrt(r10452);
        float r10454 = r10431 * r10453;
        float r10455 = r10451 + r10454;
        float r10456 = r10437 ? r10449 : r10455;
        float r10457 = r10435 ? r10433 : r10456;
        return r10457;
}

double f_od(double g, double h, double a) {
        double r10458 = g;
        double r10459 = -r10458;
        double r10460 = h;
        double r10461 = r10458 + r10460;
        double r10462 = r10458 - r10460;
        double r10463 = r10461 * r10462;
        double r10464 = sqrt(r10463);
        double r10465 = r10459 - r10464;
        double r10466 = cbrt(r10465);
        double r10467 = a;
        double r10468 = 2.0;
        double r10469 = r10467 * r10468;
        double r10470 = cbrt(r10469);
        double r10471 = r10466 / r10470;
        double r10472 = r10459 + r10458;
        double r10473 = cbrt(r10472);
        double r10474 = 1.0;
        double r10475 = r10474 / r10469;
        double r10476 = cbrt(r10475);
        double r10477 = r10473 * r10476;
        double r10478 = r10471 + r10477;
        double r10479 = -4.644802488352878e-113;
        bool r10480 = r10478 <= r10479;
        double r10481 = 3.1391489186073185e-117;
        bool r10482 = r10478 <= r10481;
        double r10483 = r10458 * r10458;
        double r10484 = r10460 * r10460;
        double r10485 = r10483 - r10484;
        double r10486 = sqrt(r10485);
        double r10487 = r10459 - r10486;
        double r10488 = r10487 * r10475;
        double r10489 = cbrt(r10488);
        double r10490 = r10458 + r10458;
        double r10491 = -r10490;
        double r10492 = cbrt(r10491);
        double r10493 = r10492 * r10476;
        double r10494 = r10489 + r10493;
        double r10495 = cbrt(r10487);
        double r10496 = r10476 * r10495;
        double r10497 = r10486 + r10459;
        double r10498 = cbrt(r10497);
        double r10499 = r10476 * r10498;
        double r10500 = r10496 + r10499;
        double r10501 = r10482 ? r10494 : r10500;
        double r10502 = r10480 ? r10478 : r10501;
        return r10502;
}

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 r10503, r10504, r10505, r10506, r10507, r10508, r10509, r10510, r10511, r10512, r10513, r10514, r10515, r10516, r10517, r10518, r10519, r10520, r10521;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10503, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10504, "2", 10, MPFR_RNDN);
        mpfr_init(r10505);
        mpfr_init(r10506);
        mpfr_init(r10507);
        mpfr_init(r10508);
        mpfr_init(r10509);
        mpfr_init(r10510);
        mpfr_init(r10511);
        mpfr_init(r10512);
        mpfr_init(r10513);
        mpfr_init(r10514);
        mpfr_init(r10515);
        mpfr_init(r10516);
        mpfr_init(r10517);
        mpfr_init(r10518);
        mpfr_init(r10519);
        mpfr_init(r10520);
        mpfr_init(r10521);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r10505, a, MPFR_RNDN);
        mpfr_mul(r10506, r10504, r10505, MPFR_RNDN);
        mpfr_div(r10507, r10503, r10506, MPFR_RNDN);
        mpfr_set_d(r10508, g, MPFR_RNDN);
        mpfr_neg(r10509, r10508, MPFR_RNDN);
        mpfr_mul(r10510, r10508, r10508, MPFR_RNDN);
        mpfr_set_d(r10511, h, MPFR_RNDN);
        mpfr_mul(r10512, r10511, r10511, MPFR_RNDN);
        mpfr_sub(r10513, r10510, r10512, MPFR_RNDN);
        mpfr_sqrt(r10514, r10513, MPFR_RNDN);
        mpfr_add(r10515, r10509, r10514, MPFR_RNDN);
        mpfr_mul(r10516, r10507, r10515, MPFR_RNDN);
        mpfr_cbrt(r10517, r10516, MPFR_RNDN);
        mpfr_sub(r10518, r10509, r10514, MPFR_RNDN);
        mpfr_mul(r10519, r10507, r10518, MPFR_RNDN);
        mpfr_cbrt(r10520, r10519, MPFR_RNDN);
        mpfr_add(r10521, r10517, r10520, MPFR_RNDN);
        return mpfr_get_d(r10521, MPFR_RNDN);
}

static mpfr_t r10522, r10523, r10524, r10525, r10526, r10527, r10528, r10529, r10530, r10531, r10532, r10533, r10534, r10535, r10536, r10537, r10538, r10539, r10540, r10541, r10542, r10543, r10544, r10545, r10546, r10547, r10548, r10549, r10550, r10551, r10552, r10553, r10554, r10555, r10556, r10557, r10558, r10559, r10560, r10561, r10562, r10563, r10564, r10565, r10566;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10522);
        mpfr_init(r10523);
        mpfr_init(r10524);
        mpfr_init(r10525);
        mpfr_init(r10526);
        mpfr_init(r10527);
        mpfr_init(r10528);
        mpfr_init(r10529);
        mpfr_init(r10530);
        mpfr_init(r10531);
        mpfr_init_set_str(r10532, "2", 10, MPFR_RNDN);
        mpfr_init(r10533);
        mpfr_init(r10534);
        mpfr_init(r10535);
        mpfr_init(r10536);
        mpfr_init(r10537);
        mpfr_init_set_str(r10538, "1", 10, MPFR_RNDN);
        mpfr_init(r10539);
        mpfr_init(r10540);
        mpfr_init(r10541);
        mpfr_init(r10542);
        mpfr_init_set_str(r10543, "-4.644802488352878e-113", 10, MPFR_RNDN);
        mpfr_init(r10544);
        mpfr_init_set_str(r10545, "3.1391489186073185e-117", 10, MPFR_RNDN);
        mpfr_init(r10546);
        mpfr_init(r10547);
        mpfr_init(r10548);
        mpfr_init(r10549);
        mpfr_init(r10550);
        mpfr_init(r10551);
        mpfr_init(r10552);
        mpfr_init(r10553);
        mpfr_init(r10554);
        mpfr_init(r10555);
        mpfr_init(r10556);
        mpfr_init(r10557);
        mpfr_init(r10558);
        mpfr_init(r10559);
        mpfr_init(r10560);
        mpfr_init(r10561);
        mpfr_init(r10562);
        mpfr_init(r10563);
        mpfr_init(r10564);
        mpfr_init(r10565);
        mpfr_init(r10566);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r10522, g, MPFR_RNDN);
        mpfr_neg(r10523, r10522, MPFR_RNDN);
        mpfr_set_d(r10524, h, MPFR_RNDN);
        mpfr_add(r10525, r10522, r10524, MPFR_RNDN);
        mpfr_sub(r10526, r10522, r10524, MPFR_RNDN);
        mpfr_mul(r10527, r10525, r10526, MPFR_RNDN);
        mpfr_sqrt(r10528, r10527, MPFR_RNDN);
        mpfr_sub(r10529, r10523, r10528, MPFR_RNDN);
        mpfr_cbrt(r10530, r10529, MPFR_RNDN);
        mpfr_set_d(r10531, a, MPFR_RNDN);
        ;
        mpfr_mul(r10533, r10531, r10532, MPFR_RNDN);
        mpfr_cbrt(r10534, r10533, MPFR_RNDN);
        mpfr_div(r10535, r10530, r10534, MPFR_RNDN);
        mpfr_add(r10536, r10523, r10522, MPFR_RNDN);
        mpfr_cbrt(r10537, r10536, MPFR_RNDN);
        ;
        mpfr_div(r10539, r10538, r10533, MPFR_RNDN);
        mpfr_cbrt(r10540, r10539, MPFR_RNDN);
        mpfr_mul(r10541, r10537, r10540, MPFR_RNDN);
        mpfr_add(r10542, r10535, r10541, MPFR_RNDN);
        ;
        mpfr_set_si(r10544, mpfr_cmp(r10542, r10543) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10546, mpfr_cmp(r10542, r10545) <= 0, MPFR_RNDN);
        mpfr_mul(r10547, r10522, r10522, MPFR_RNDN);
        mpfr_mul(r10548, r10524, r10524, MPFR_RNDN);
        mpfr_sub(r10549, r10547, r10548, MPFR_RNDN);
        mpfr_sqrt(r10550, r10549, MPFR_RNDN);
        mpfr_sub(r10551, r10523, r10550, MPFR_RNDN);
        mpfr_mul(r10552, r10551, r10539, MPFR_RNDN);
        mpfr_cbrt(r10553, r10552, MPFR_RNDN);
        mpfr_add(r10554, r10522, r10522, MPFR_RNDN);
        mpfr_neg(r10555, r10554, MPFR_RNDN);
        mpfr_cbrt(r10556, r10555, MPFR_RNDN);
        mpfr_mul(r10557, r10556, r10540, MPFR_RNDN);
        mpfr_add(r10558, r10553, r10557, MPFR_RNDN);
        mpfr_cbrt(r10559, r10551, MPFR_RNDN);
        mpfr_mul(r10560, r10540, r10559, MPFR_RNDN);
        mpfr_add(r10561, r10550, r10523, MPFR_RNDN);
        mpfr_cbrt(r10562, r10561, MPFR_RNDN);
        mpfr_mul(r10563, r10540, r10562, MPFR_RNDN);
        mpfr_add(r10564, r10560, r10563, MPFR_RNDN);
        if (mpfr_get_si(r10546, MPFR_RNDN)) { mpfr_set(r10565, r10558, MPFR_RNDN); } else { mpfr_set(r10565, r10564, MPFR_RNDN); };
        if (mpfr_get_si(r10544, MPFR_RNDN)) { mpfr_set(r10566, r10542, MPFR_RNDN); } else { mpfr_set(r10566, r10565, MPFR_RNDN); };
        return mpfr_get_d(r10566, MPFR_RNDN);
}

static mpfr_t r10567, r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576, r10577, r10578, r10579, r10580, r10581, r10582, r10583, r10584, r10585, r10586, r10587, r10588, r10589, r10590, r10591, r10592, r10593, r10594, r10595, r10596, r10597, r10598, r10599, r10600, r10601, r10602, r10603, r10604, r10605, r10606, r10607, r10608, r10609, r10610, r10611;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10567);
        mpfr_init(r10568);
        mpfr_init(r10569);
        mpfr_init(r10570);
        mpfr_init(r10571);
        mpfr_init(r10572);
        mpfr_init(r10573);
        mpfr_init(r10574);
        mpfr_init(r10575);
        mpfr_init(r10576);
        mpfr_init_set_str(r10577, "2", 10, MPFR_RNDN);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init(r10582);
        mpfr_init_set_str(r10583, "1", 10, MPFR_RNDN);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
        mpfr_init(r10587);
        mpfr_init_set_str(r10588, "-4.644802488352878e-113", 10, MPFR_RNDN);
        mpfr_init(r10589);
        mpfr_init_set_str(r10590, "3.1391489186073185e-117", 10, MPFR_RNDN);
        mpfr_init(r10591);
        mpfr_init(r10592);
        mpfr_init(r10593);
        mpfr_init(r10594);
        mpfr_init(r10595);
        mpfr_init(r10596);
        mpfr_init(r10597);
        mpfr_init(r10598);
        mpfr_init(r10599);
        mpfr_init(r10600);
        mpfr_init(r10601);
        mpfr_init(r10602);
        mpfr_init(r10603);
        mpfr_init(r10604);
        mpfr_init(r10605);
        mpfr_init(r10606);
        mpfr_init(r10607);
        mpfr_init(r10608);
        mpfr_init(r10609);
        mpfr_init(r10610);
        mpfr_init(r10611);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r10567, g, MPFR_RNDN);
        mpfr_neg(r10568, r10567, MPFR_RNDN);
        mpfr_set_d(r10569, h, MPFR_RNDN);
        mpfr_add(r10570, r10567, r10569, MPFR_RNDN);
        mpfr_sub(r10571, r10567, r10569, MPFR_RNDN);
        mpfr_mul(r10572, r10570, r10571, MPFR_RNDN);
        mpfr_sqrt(r10573, r10572, MPFR_RNDN);
        mpfr_sub(r10574, r10568, r10573, MPFR_RNDN);
        mpfr_cbrt(r10575, r10574, MPFR_RNDN);
        mpfr_set_d(r10576, a, MPFR_RNDN);
        ;
        mpfr_mul(r10578, r10576, r10577, MPFR_RNDN);
        mpfr_cbrt(r10579, r10578, MPFR_RNDN);
        mpfr_div(r10580, r10575, r10579, MPFR_RNDN);
        mpfr_add(r10581, r10568, r10567, MPFR_RNDN);
        mpfr_cbrt(r10582, r10581, MPFR_RNDN);
        ;
        mpfr_div(r10584, r10583, r10578, MPFR_RNDN);
        mpfr_cbrt(r10585, r10584, MPFR_RNDN);
        mpfr_mul(r10586, r10582, r10585, MPFR_RNDN);
        mpfr_add(r10587, r10580, r10586, MPFR_RNDN);
        ;
        mpfr_set_si(r10589, mpfr_cmp(r10587, r10588) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10591, mpfr_cmp(r10587, r10590) <= 0, MPFR_RNDN);
        mpfr_mul(r10592, r10567, r10567, MPFR_RNDN);
        mpfr_mul(r10593, r10569, r10569, MPFR_RNDN);
        mpfr_sub(r10594, r10592, r10593, MPFR_RNDN);
        mpfr_sqrt(r10595, r10594, MPFR_RNDN);
        mpfr_sub(r10596, r10568, r10595, MPFR_RNDN);
        mpfr_mul(r10597, r10596, r10584, MPFR_RNDN);
        mpfr_cbrt(r10598, r10597, MPFR_RNDN);
        mpfr_add(r10599, r10567, r10567, MPFR_RNDN);
        mpfr_neg(r10600, r10599, MPFR_RNDN);
        mpfr_cbrt(r10601, r10600, MPFR_RNDN);
        mpfr_mul(r10602, r10601, r10585, MPFR_RNDN);
        mpfr_add(r10603, r10598, r10602, MPFR_RNDN);
        mpfr_cbrt(r10604, r10596, MPFR_RNDN);
        mpfr_mul(r10605, r10585, r10604, MPFR_RNDN);
        mpfr_add(r10606, r10595, r10568, MPFR_RNDN);
        mpfr_cbrt(r10607, r10606, MPFR_RNDN);
        mpfr_mul(r10608, r10585, r10607, MPFR_RNDN);
        mpfr_add(r10609, r10605, r10608, MPFR_RNDN);
        if (mpfr_get_si(r10591, MPFR_RNDN)) { mpfr_set(r10610, r10603, MPFR_RNDN); } else { mpfr_set(r10610, r10609, MPFR_RNDN); };
        if (mpfr_get_si(r10589, MPFR_RNDN)) { mpfr_set(r10611, r10587, MPFR_RNDN); } else { mpfr_set(r10611, r10610, MPFR_RNDN); };
        return mpfr_get_d(r10611, MPFR_RNDN);
}

