#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2-ancestry mixing, negative discriminant";

double f_if(float g, float h) {
        float r37404 = 2;
        float r37405 = atan2(1.0, 0.0);
        float r37406 = r37404 * r37405;
        float r37407 = 3;
        float r37408 = r37406 / r37407;
        float r37409 = g;
        float r37410 = -r37409;
        float r37411 = h;
        float r37412 = r37410 / r37411;
        float r37413 = acos(r37412);
        float r37414 = r37413 / r37407;
        float r37415 = r37408 + r37414;
        float r37416 = cos(r37415);
        float r37417 = r37404 * r37416;
        return r37417;
}

double f_id(double g, double h) {
        double r37418 = 2;
        double r37419 = atan2(1.0, 0.0);
        double r37420 = r37418 * r37419;
        double r37421 = 3;
        double r37422 = r37420 / r37421;
        double r37423 = g;
        double r37424 = -r37423;
        double r37425 = h;
        double r37426 = r37424 / r37425;
        double r37427 = acos(r37426);
        double r37428 = r37427 / r37421;
        double r37429 = r37422 + r37428;
        double r37430 = cos(r37429);
        double r37431 = r37418 * r37430;
        return r37431;
}


double f_of(float g, float h) {
        float r37432 = 2;
        float r37433 = g;
        float r37434 = h;
        float r37435 = r37433 / r37434;
        float r37436 = acos(r37435);
        float r37437 = 3;
        float r37438 = r37436 / r37437;
        float r37439 = cos(r37438);
        float r37440 = 1;
        float r37441 = r37432 + r37440;
        float r37442 = atan2(1.0, 0.0);
        float r37443 = r37442 / r37437;
        float r37444 = r37441 * r37443;
        float r37445 = cos(r37444);
        float r37446 = r37439 * r37445;
        float r37447 = sin(r37438);
        float r37448 = sin(r37444);
        float r37449 = r37447 * r37448;
        float r37450 = r37446 + r37449;
        float r37451 = r37432 * r37450;
        return r37451;
}

double f_od(double g, double h) {
        double r37452 = 2;
        double r37453 = g;
        double r37454 = h;
        double r37455 = r37453 / r37454;
        double r37456 = acos(r37455);
        double r37457 = 3;
        double r37458 = r37456 / r37457;
        double r37459 = cos(r37458);
        double r37460 = 1;
        double r37461 = r37452 + r37460;
        double r37462 = atan2(1.0, 0.0);
        double r37463 = r37462 / r37457;
        double r37464 = r37461 * r37463;
        double r37465 = cos(r37464);
        double r37466 = r37459 * r37465;
        double r37467 = sin(r37458);
        double r37468 = sin(r37464);
        double r37469 = r37467 * r37468;
        double r37470 = r37466 + r37469;
        double r37471 = r37452 * r37470;
        return r37471;
}

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 r37472, r37473, r37474, r37475, r37476, r37477, r37478, r37479, r37480, r37481, r37482, r37483, r37484, r37485;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37472, "2", 10, MPFR_RNDN);
        mpfr_init(r37473);
        mpfr_init(r37474);
        mpfr_init_set_str(r37475, "3", 10, MPFR_RNDN);
        mpfr_init(r37476);
        mpfr_init(r37477);
        mpfr_init(r37478);
        mpfr_init(r37479);
        mpfr_init(r37480);
        mpfr_init(r37481);
        mpfr_init(r37482);
        mpfr_init(r37483);
        mpfr_init(r37484);
        mpfr_init(r37485);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r37473, MPFR_RNDN);
        mpfr_mul(r37474, r37472, r37473, MPFR_RNDN);
        ;
        mpfr_div(r37476, r37474, r37475, MPFR_RNDN);
        mpfr_set_d(r37477, g, MPFR_RNDN);
        mpfr_neg(r37478, r37477, MPFR_RNDN);
        mpfr_set_d(r37479, h, MPFR_RNDN);
        mpfr_div(r37480, r37478, r37479, MPFR_RNDN);
        mpfr_acos(r37481, r37480, MPFR_RNDN);
        mpfr_div(r37482, r37481, r37475, MPFR_RNDN);
        mpfr_add(r37483, r37476, r37482, MPFR_RNDN);
        mpfr_cos(r37484, r37483, MPFR_RNDN);
        mpfr_mul(r37485, r37472, r37484, MPFR_RNDN);
        return mpfr_get_d(r37485, MPFR_RNDN);
}

static mpfr_t r37486, r37487, r37488, r37489, r37490, r37491, r37492, r37493, r37494, r37495, r37496, r37497, r37498, r37499, r37500, r37501, r37502, r37503, r37504, r37505;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37486, "2", 10, MPFR_RNDN);
        mpfr_init(r37487);
        mpfr_init(r37488);
        mpfr_init(r37489);
        mpfr_init(r37490);
        mpfr_init_set_str(r37491, "3", 10, MPFR_RNDN);
        mpfr_init(r37492);
        mpfr_init(r37493);
        mpfr_init_set_str(r37494, "1", 10, MPFR_RNDN);
        mpfr_init(r37495);
        mpfr_init(r37496);
        mpfr_init(r37497);
        mpfr_init(r37498);
        mpfr_init(r37499);
        mpfr_init(r37500);
        mpfr_init(r37501);
        mpfr_init(r37502);
        mpfr_init(r37503);
        mpfr_init(r37504);
        mpfr_init(r37505);
}

double f_fm(double g, double h) {
        ;
        mpfr_set_d(r37487, g, MPFR_RNDN);
        mpfr_set_d(r37488, h, MPFR_RNDN);
        mpfr_div(r37489, r37487, r37488, MPFR_RNDN);
        mpfr_acos(r37490, r37489, MPFR_RNDN);
        ;
        mpfr_div(r37492, r37490, r37491, MPFR_RNDN);
        mpfr_cos(r37493, r37492, MPFR_RNDN);
        ;
        mpfr_add(r37495, r37486, r37494, MPFR_RNDN);
        mpfr_const_pi(r37496, MPFR_RNDN);
        mpfr_div(r37497, r37496, r37491, MPFR_RNDN);
        mpfr_mul(r37498, r37495, r37497, MPFR_RNDN);
        mpfr_cos(r37499, r37498, MPFR_RNDN);
        mpfr_mul(r37500, r37493, r37499, MPFR_RNDN);
        mpfr_sin(r37501, r37492, MPFR_RNDN);
        mpfr_sin(r37502, r37498, MPFR_RNDN);
        mpfr_mul(r37503, r37501, r37502, MPFR_RNDN);
        mpfr_add(r37504, r37500, r37503, MPFR_RNDN);
        mpfr_mul(r37505, r37486, r37504, MPFR_RNDN);
        return mpfr_get_d(r37505, MPFR_RNDN);
}

static mpfr_t r37506, r37507, r37508, r37509, r37510, r37511, r37512, r37513, r37514, r37515, r37516, r37517, r37518, r37519, r37520, r37521, r37522, r37523, r37524, r37525;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37506, "2", 10, MPFR_RNDN);
        mpfr_init(r37507);
        mpfr_init(r37508);
        mpfr_init(r37509);
        mpfr_init(r37510);
        mpfr_init_set_str(r37511, "3", 10, MPFR_RNDN);
        mpfr_init(r37512);
        mpfr_init(r37513);
        mpfr_init_set_str(r37514, "1", 10, MPFR_RNDN);
        mpfr_init(r37515);
        mpfr_init(r37516);
        mpfr_init(r37517);
        mpfr_init(r37518);
        mpfr_init(r37519);
        mpfr_init(r37520);
        mpfr_init(r37521);
        mpfr_init(r37522);
        mpfr_init(r37523);
        mpfr_init(r37524);
        mpfr_init(r37525);
}

double f_dm(double g, double h) {
        ;
        mpfr_set_d(r37507, g, MPFR_RNDN);
        mpfr_set_d(r37508, h, MPFR_RNDN);
        mpfr_div(r37509, r37507, r37508, MPFR_RNDN);
        mpfr_acos(r37510, r37509, MPFR_RNDN);
        ;
        mpfr_div(r37512, r37510, r37511, MPFR_RNDN);
        mpfr_cos(r37513, r37512, MPFR_RNDN);
        ;
        mpfr_add(r37515, r37506, r37514, MPFR_RNDN);
        mpfr_const_pi(r37516, MPFR_RNDN);
        mpfr_div(r37517, r37516, r37511, MPFR_RNDN);
        mpfr_mul(r37518, r37515, r37517, MPFR_RNDN);
        mpfr_cos(r37519, r37518, MPFR_RNDN);
        mpfr_mul(r37520, r37513, r37519, MPFR_RNDN);
        mpfr_sin(r37521, r37512, MPFR_RNDN);
        mpfr_sin(r37522, r37518, MPFR_RNDN);
        mpfr_mul(r37523, r37521, r37522, MPFR_RNDN);
        mpfr_add(r37524, r37520, r37523, MPFR_RNDN);
        mpfr_mul(r37525, r37506, r37524, MPFR_RNDN);
        return mpfr_get_d(r37525, MPFR_RNDN);
}

