#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 r10404 = 1.0f;
        float r10405 = 2.0f;
        float r10406 = a;
        float r10407 = r10405 * r10406;
        float r10408 = r10404 / r10407;
        float r10409 = g;
        float r10410 = -r10409;
        float r10411 = r10409 * r10409;
        float r10412 = h;
        float r10413 = r10412 * r10412;
        float r10414 = r10411 - r10413;
        float r10415 = sqrt(r10414);
        float r10416 = r10410 + r10415;
        float r10417 = r10408 * r10416;
        float r10418 = cbrt(r10417);
        float r10419 = r10410 - r10415;
        float r10420 = r10408 * r10419;
        float r10421 = cbrt(r10420);
        float r10422 = r10418 + r10421;
        return r10422;
}

double f_id(double g, double h, double a) {
        double r10423 = 1.0;
        double r10424 = 2.0;
        double r10425 = a;
        double r10426 = r10424 * r10425;
        double r10427 = r10423 / r10426;
        double r10428 = g;
        double r10429 = -r10428;
        double r10430 = r10428 * r10428;
        double r10431 = h;
        double r10432 = r10431 * r10431;
        double r10433 = r10430 - r10432;
        double r10434 = sqrt(r10433);
        double r10435 = r10429 + r10434;
        double r10436 = r10427 * r10435;
        double r10437 = cbrt(r10436);
        double r10438 = r10429 - r10434;
        double r10439 = r10427 * r10438;
        double r10440 = cbrt(r10439);
        double r10441 = r10437 + r10440;
        return r10441;
}


double f_of(float g, float h, float a) {
        float r10442 = g;
        float r10443 = -r10442;
        float r10444 = h;
        float r10445 = r10442 + r10444;
        float r10446 = r10442 - r10444;
        float r10447 = r10445 * r10446;
        float r10448 = sqrt(r10447);
        float r10449 = r10443 - r10448;
        float r10450 = cbrt(r10449);
        float r10451 = a;
        float r10452 = 2.0f;
        float r10453 = r10451 * r10452;
        float r10454 = cbrt(r10453);
        float r10455 = r10450 / r10454;
        float r10456 = r10442 * r10442;
        float r10457 = r10444 * r10444;
        float r10458 = r10456 - r10457;
        float r10459 = sqrt(r10458);
        float r10460 = r10443 + r10459;
        float r10461 = sqrt(r10460);
        float r10462 = r10461 * r10461;
        float r10463 = cbrt(r10462);
        float r10464 = 1.0f;
        float r10465 = r10464 / r10453;
        float r10466 = cbrt(r10465);
        float r10467 = r10463 * r10466;
        float r10468 = r10455 + r10467;
        float r10469 = 2.9815749658200832e+122f;
        bool r10470 = r10468 <= r10469;
        float r10471 = r10448 - r10442;
        float r10472 = sqrt(r10471);
        float r10473 = r10472 * r10472;
        float r10474 = cbrt(r10473);
        float r10475 = r10474 / r10454;
        float r10476 = r10475 + r10455;
        float r10477 = r10443 - r10442;
        float r10478 = cbrt(r10477);
        float r10479 = r10478 / r10454;
        float r10480 = r10465 * r10460;
        float r10481 = cbrt(r10480);
        float r10482 = r10479 + r10481;
        float r10483 = r10470 ? r10476 : r10482;
        return r10483;
}

double f_od(double g, double h, double a) {
        double r10484 = g;
        double r10485 = -r10484;
        double r10486 = h;
        double r10487 = r10484 + r10486;
        double r10488 = r10484 - r10486;
        double r10489 = r10487 * r10488;
        double r10490 = sqrt(r10489);
        double r10491 = r10485 - r10490;
        double r10492 = cbrt(r10491);
        double r10493 = a;
        double r10494 = 2.0;
        double r10495 = r10493 * r10494;
        double r10496 = cbrt(r10495);
        double r10497 = r10492 / r10496;
        double r10498 = r10484 * r10484;
        double r10499 = r10486 * r10486;
        double r10500 = r10498 - r10499;
        double r10501 = sqrt(r10500);
        double r10502 = r10485 + r10501;
        double r10503 = sqrt(r10502);
        double r10504 = r10503 * r10503;
        double r10505 = cbrt(r10504);
        double r10506 = 1.0;
        double r10507 = r10506 / r10495;
        double r10508 = cbrt(r10507);
        double r10509 = r10505 * r10508;
        double r10510 = r10497 + r10509;
        double r10511 = 2.9815749658200832e+122;
        bool r10512 = r10510 <= r10511;
        double r10513 = r10490 - r10484;
        double r10514 = sqrt(r10513);
        double r10515 = r10514 * r10514;
        double r10516 = cbrt(r10515);
        double r10517 = r10516 / r10496;
        double r10518 = r10517 + r10497;
        double r10519 = r10485 - r10484;
        double r10520 = cbrt(r10519);
        double r10521 = r10520 / r10496;
        double r10522 = r10507 * r10502;
        double r10523 = cbrt(r10522);
        double r10524 = r10521 + r10523;
        double r10525 = r10512 ? r10518 : r10524;
        return r10525;
}

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 r10526, r10527, r10528, r10529, r10530, r10531, r10532, r10533, r10534, r10535, r10536, r10537, r10538, r10539, r10540, r10541, r10542, r10543, r10544;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r10526, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r10527, "2", 10, MPFR_RNDN);
        mpfr_init(r10528);
        mpfr_init(r10529);
        mpfr_init(r10530);
        mpfr_init(r10531);
        mpfr_init(r10532);
        mpfr_init(r10533);
        mpfr_init(r10534);
        mpfr_init(r10535);
        mpfr_init(r10536);
        mpfr_init(r10537);
        mpfr_init(r10538);
        mpfr_init(r10539);
        mpfr_init(r10540);
        mpfr_init(r10541);
        mpfr_init(r10542);
        mpfr_init(r10543);
        mpfr_init(r10544);
}

double f_im(double g, double h, double a) {
        ;
        ;
        mpfr_set_d(r10528, a, MPFR_RNDN);
        mpfr_mul(r10529, r10527, r10528, MPFR_RNDN);
        mpfr_div(r10530, r10526, r10529, MPFR_RNDN);
        mpfr_set_d(r10531, g, MPFR_RNDN);
        mpfr_neg(r10532, r10531, MPFR_RNDN);
        mpfr_mul(r10533, r10531, r10531, MPFR_RNDN);
        mpfr_set_d(r10534, h, MPFR_RNDN);
        mpfr_mul(r10535, r10534, r10534, MPFR_RNDN);
        mpfr_sub(r10536, r10533, r10535, MPFR_RNDN);
        mpfr_sqrt(r10537, r10536, MPFR_RNDN);
        mpfr_add(r10538, r10532, r10537, MPFR_RNDN);
        mpfr_mul(r10539, r10530, r10538, MPFR_RNDN);
        mpfr_cbrt(r10540, r10539, MPFR_RNDN);
        mpfr_sub(r10541, r10532, r10537, MPFR_RNDN);
        mpfr_mul(r10542, r10530, r10541, MPFR_RNDN);
        mpfr_cbrt(r10543, r10542, MPFR_RNDN);
        mpfr_add(r10544, r10540, r10543, MPFR_RNDN);
        return mpfr_get_d(r10544, MPFR_RNDN);
}

static mpfr_t r10545, r10546, r10547, r10548, r10549, r10550, r10551, r10552, r10553, r10554, r10555, r10556, r10557, r10558, r10559, r10560, r10561, r10562, r10563, r10564, r10565, r10566, r10567, r10568, r10569, r10570, r10571, r10572, r10573, r10574, r10575, r10576, r10577, r10578, r10579, r10580, r10581, r10582, r10583, r10584, r10585, r10586;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10545);
        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_set_str(r10555, "2", 10, MPFR_RNDN);
        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);
        mpfr_init_set_str(r10567, "1", 10, MPFR_RNDN);
        mpfr_init(r10568);
        mpfr_init(r10569);
        mpfr_init(r10570);
        mpfr_init(r10571);
        mpfr_init_set_str(r10572, "2.9815749658200832e+122", 10, MPFR_RNDN);
        mpfr_init(r10573);
        mpfr_init(r10574);
        mpfr_init(r10575);
        mpfr_init(r10576);
        mpfr_init(r10577);
        mpfr_init(r10578);
        mpfr_init(r10579);
        mpfr_init(r10580);
        mpfr_init(r10581);
        mpfr_init(r10582);
        mpfr_init(r10583);
        mpfr_init(r10584);
        mpfr_init(r10585);
        mpfr_init(r10586);
}

double f_fm(double g, double h, double a) {
        mpfr_set_d(r10545, g, MPFR_RNDN);
        mpfr_neg(r10546, r10545, MPFR_RNDN);
        mpfr_set_d(r10547, h, MPFR_RNDN);
        mpfr_add(r10548, r10545, r10547, MPFR_RNDN);
        mpfr_sub(r10549, r10545, r10547, MPFR_RNDN);
        mpfr_mul(r10550, r10548, r10549, MPFR_RNDN);
        mpfr_sqrt(r10551, r10550, MPFR_RNDN);
        mpfr_sub(r10552, r10546, r10551, MPFR_RNDN);
        mpfr_cbrt(r10553, r10552, MPFR_RNDN);
        mpfr_set_d(r10554, a, MPFR_RNDN);
        ;
        mpfr_mul(r10556, r10554, r10555, MPFR_RNDN);
        mpfr_cbrt(r10557, r10556, MPFR_RNDN);
        mpfr_div(r10558, r10553, r10557, MPFR_RNDN);
        mpfr_mul(r10559, r10545, r10545, MPFR_RNDN);
        mpfr_mul(r10560, r10547, r10547, MPFR_RNDN);
        mpfr_sub(r10561, r10559, r10560, MPFR_RNDN);
        mpfr_sqrt(r10562, r10561, MPFR_RNDN);
        mpfr_add(r10563, r10546, r10562, MPFR_RNDN);
        mpfr_sqrt(r10564, r10563, MPFR_RNDN);
        mpfr_mul(r10565, r10564, r10564, MPFR_RNDN);
        mpfr_cbrt(r10566, r10565, MPFR_RNDN);
        ;
        mpfr_div(r10568, r10567, r10556, MPFR_RNDN);
        mpfr_cbrt(r10569, r10568, MPFR_RNDN);
        mpfr_mul(r10570, r10566, r10569, MPFR_RNDN);
        mpfr_add(r10571, r10558, r10570, MPFR_RNDN);
        ;
        mpfr_set_si(r10573, mpfr_cmp(r10571, r10572) <= 0, MPFR_RNDN);
        mpfr_sub(r10574, r10551, r10545, MPFR_RNDN);
        mpfr_sqrt(r10575, r10574, MPFR_RNDN);
        mpfr_mul(r10576, r10575, r10575, MPFR_RNDN);
        mpfr_cbrt(r10577, r10576, MPFR_RNDN);
        mpfr_div(r10578, r10577, r10557, MPFR_RNDN);
        mpfr_add(r10579, r10578, r10558, MPFR_RNDN);
        mpfr_sub(r10580, r10546, r10545, MPFR_RNDN);
        mpfr_cbrt(r10581, r10580, MPFR_RNDN);
        mpfr_div(r10582, r10581, r10557, MPFR_RNDN);
        mpfr_mul(r10583, r10568, r10563, MPFR_RNDN);
        mpfr_cbrt(r10584, r10583, MPFR_RNDN);
        mpfr_add(r10585, r10582, r10584, MPFR_RNDN);
        if (mpfr_get_si(r10573, MPFR_RNDN)) { mpfr_set(r10586, r10579, MPFR_RNDN); } else { mpfr_set(r10586, r10585, MPFR_RNDN); };
        return mpfr_get_d(r10586, MPFR_RNDN);
}

static mpfr_t 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, r10612, r10613, r10614, r10615, r10616, r10617, r10618, r10619, r10620, r10621, r10622, r10623, r10624, r10625, r10626, r10627, r10628;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10587);
        mpfr_init(r10588);
        mpfr_init(r10589);
        mpfr_init(r10590);
        mpfr_init(r10591);
        mpfr_init(r10592);
        mpfr_init(r10593);
        mpfr_init(r10594);
        mpfr_init(r10595);
        mpfr_init(r10596);
        mpfr_init_set_str(r10597, "2", 10, MPFR_RNDN);
        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_set_str(r10609, "1", 10, MPFR_RNDN);
        mpfr_init(r10610);
        mpfr_init(r10611);
        mpfr_init(r10612);
        mpfr_init(r10613);
        mpfr_init_set_str(r10614, "2.9815749658200832e+122", 10, MPFR_RNDN);
        mpfr_init(r10615);
        mpfr_init(r10616);
        mpfr_init(r10617);
        mpfr_init(r10618);
        mpfr_init(r10619);
        mpfr_init(r10620);
        mpfr_init(r10621);
        mpfr_init(r10622);
        mpfr_init(r10623);
        mpfr_init(r10624);
        mpfr_init(r10625);
        mpfr_init(r10626);
        mpfr_init(r10627);
        mpfr_init(r10628);
}

double f_dm(double g, double h, double a) {
        mpfr_set_d(r10587, g, MPFR_RNDN);
        mpfr_neg(r10588, r10587, MPFR_RNDN);
        mpfr_set_d(r10589, h, MPFR_RNDN);
        mpfr_add(r10590, r10587, r10589, MPFR_RNDN);
        mpfr_sub(r10591, r10587, r10589, MPFR_RNDN);
        mpfr_mul(r10592, r10590, r10591, MPFR_RNDN);
        mpfr_sqrt(r10593, r10592, MPFR_RNDN);
        mpfr_sub(r10594, r10588, r10593, MPFR_RNDN);
        mpfr_cbrt(r10595, r10594, MPFR_RNDN);
        mpfr_set_d(r10596, a, MPFR_RNDN);
        ;
        mpfr_mul(r10598, r10596, r10597, MPFR_RNDN);
        mpfr_cbrt(r10599, r10598, MPFR_RNDN);
        mpfr_div(r10600, r10595, r10599, MPFR_RNDN);
        mpfr_mul(r10601, r10587, r10587, MPFR_RNDN);
        mpfr_mul(r10602, r10589, r10589, MPFR_RNDN);
        mpfr_sub(r10603, r10601, r10602, MPFR_RNDN);
        mpfr_sqrt(r10604, r10603, MPFR_RNDN);
        mpfr_add(r10605, r10588, r10604, MPFR_RNDN);
        mpfr_sqrt(r10606, r10605, MPFR_RNDN);
        mpfr_mul(r10607, r10606, r10606, MPFR_RNDN);
        mpfr_cbrt(r10608, r10607, MPFR_RNDN);
        ;
        mpfr_div(r10610, r10609, r10598, MPFR_RNDN);
        mpfr_cbrt(r10611, r10610, MPFR_RNDN);
        mpfr_mul(r10612, r10608, r10611, MPFR_RNDN);
        mpfr_add(r10613, r10600, r10612, MPFR_RNDN);
        ;
        mpfr_set_si(r10615, mpfr_cmp(r10613, r10614) <= 0, MPFR_RNDN);
        mpfr_sub(r10616, r10593, r10587, MPFR_RNDN);
        mpfr_sqrt(r10617, r10616, MPFR_RNDN);
        mpfr_mul(r10618, r10617, r10617, MPFR_RNDN);
        mpfr_cbrt(r10619, r10618, MPFR_RNDN);
        mpfr_div(r10620, r10619, r10599, MPFR_RNDN);
        mpfr_add(r10621, r10620, r10600, MPFR_RNDN);
        mpfr_sub(r10622, r10588, r10587, MPFR_RNDN);
        mpfr_cbrt(r10623, r10622, MPFR_RNDN);
        mpfr_div(r10624, r10623, r10599, MPFR_RNDN);
        mpfr_mul(r10625, r10610, r10605, MPFR_RNDN);
        mpfr_cbrt(r10626, r10625, MPFR_RNDN);
        mpfr_add(r10627, r10624, r10626, MPFR_RNDN);
        if (mpfr_get_si(r10615, MPFR_RNDN)) { mpfr_set(r10628, r10621, MPFR_RNDN); } else { mpfr_set(r10628, r10627, MPFR_RNDN); };
        return mpfr_get_d(r10628, MPFR_RNDN);
}

