#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 r37393 = 2;
        float r37394 = atan2(1.0, 0.0);
        float r37395 = r37393 * r37394;
        float r37396 = 3;
        float r37397 = r37395 / r37396;
        float r37398 = g;
        float r37399 = -r37398;
        float r37400 = h;
        float r37401 = r37399 / r37400;
        float r37402 = acos(r37401);
        float r37403 = r37402 / r37396;
        float r37404 = r37397 + r37403;
        float r37405 = cos(r37404);
        float r37406 = r37393 * r37405;
        return r37406;
}

double f_id(double g, double h) {
        double r37407 = 2;
        double r37408 = atan2(1.0, 0.0);
        double r37409 = r37407 * r37408;
        double r37410 = 3;
        double r37411 = r37409 / r37410;
        double r37412 = g;
        double r37413 = -r37412;
        double r37414 = h;
        double r37415 = r37413 / r37414;
        double r37416 = acos(r37415);
        double r37417 = r37416 / r37410;
        double r37418 = r37411 + r37417;
        double r37419 = cos(r37418);
        double r37420 = r37407 * r37419;
        return r37420;
}


double f_of(float g, float h) {
        float r37421 = 2;
        float r37422 = g;
        float r37423 = h;
        float r37424 = r37422 / r37423;
        float r37425 = acos(r37424);
        float r37426 = 3;
        float r37427 = r37425 / r37426;
        float r37428 = cos(r37427);
        float r37429 = 1;
        float r37430 = r37421 + r37429;
        float r37431 = atan2(1.0, 0.0);
        float r37432 = r37431 / r37426;
        float r37433 = r37430 * r37432;
        float r37434 = cos(r37433);
        float r37435 = r37428 * r37434;
        float r37436 = sin(r37427);
        float r37437 = sin(r37433);
        float r37438 = r37436 * r37437;
        float r37439 = r37435 + r37438;
        float r37440 = r37421 * r37439;
        return r37440;
}

double f_od(double g, double h) {
        double r37441 = 2;
        double r37442 = g;
        double r37443 = h;
        double r37444 = r37442 / r37443;
        double r37445 = acos(r37444);
        double r37446 = 3;
        double r37447 = r37445 / r37446;
        double r37448 = cos(r37447);
        double r37449 = 1;
        double r37450 = r37441 + r37449;
        double r37451 = atan2(1.0, 0.0);
        double r37452 = r37451 / r37446;
        double r37453 = r37450 * r37452;
        double r37454 = cos(r37453);
        double r37455 = r37448 * r37454;
        double r37456 = sin(r37447);
        double r37457 = sin(r37453);
        double r37458 = r37456 * r37457;
        double r37459 = r37455 + r37458;
        double r37460 = r37441 * r37459;
        return r37460;
}

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 r37461, r37462, r37463, r37464, r37465, r37466, r37467, r37468, r37469, r37470, r37471, r37472, r37473, r37474;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37461, "2", 10, MPFR_RNDN);
        mpfr_init(r37462);
        mpfr_init(r37463);
        mpfr_init_set_str(r37464, "3", 10, MPFR_RNDN);
        mpfr_init(r37465);
        mpfr_init(r37466);
        mpfr_init(r37467);
        mpfr_init(r37468);
        mpfr_init(r37469);
        mpfr_init(r37470);
        mpfr_init(r37471);
        mpfr_init(r37472);
        mpfr_init(r37473);
        mpfr_init(r37474);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r37462, MPFR_RNDN);
        mpfr_mul(r37463, r37461, r37462, MPFR_RNDN);
        ;
        mpfr_div(r37465, r37463, r37464, MPFR_RNDN);
        mpfr_set_d(r37466, g, MPFR_RNDN);
        mpfr_neg(r37467, r37466, MPFR_RNDN);
        mpfr_set_d(r37468, h, MPFR_RNDN);
        mpfr_div(r37469, r37467, r37468, MPFR_RNDN);
        mpfr_acos(r37470, r37469, MPFR_RNDN);
        mpfr_div(r37471, r37470, r37464, MPFR_RNDN);
        mpfr_add(r37472, r37465, r37471, MPFR_RNDN);
        mpfr_cos(r37473, r37472, MPFR_RNDN);
        mpfr_mul(r37474, r37461, r37473, MPFR_RNDN);
        return mpfr_get_d(r37474, MPFR_RNDN);
}

static mpfr_t r37475, r37476, r37477, r37478, r37479, r37480, r37481, r37482, r37483, r37484, r37485, r37486, r37487, r37488, r37489, r37490, r37491, r37492, r37493, r37494;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37475, "2", 10, MPFR_RNDN);
        mpfr_init(r37476);
        mpfr_init(r37477);
        mpfr_init(r37478);
        mpfr_init(r37479);
        mpfr_init_set_str(r37480, "3", 10, MPFR_RNDN);
        mpfr_init(r37481);
        mpfr_init(r37482);
        mpfr_init_set_str(r37483, "1", 10, MPFR_RNDN);
        mpfr_init(r37484);
        mpfr_init(r37485);
        mpfr_init(r37486);
        mpfr_init(r37487);
        mpfr_init(r37488);
        mpfr_init(r37489);
        mpfr_init(r37490);
        mpfr_init(r37491);
        mpfr_init(r37492);
        mpfr_init(r37493);
        mpfr_init(r37494);
}

double f_fm(double g, double h) {
        ;
        mpfr_set_d(r37476, g, MPFR_RNDN);
        mpfr_set_d(r37477, h, MPFR_RNDN);
        mpfr_div(r37478, r37476, r37477, MPFR_RNDN);
        mpfr_acos(r37479, r37478, MPFR_RNDN);
        ;
        mpfr_div(r37481, r37479, r37480, MPFR_RNDN);
        mpfr_cos(r37482, r37481, MPFR_RNDN);
        ;
        mpfr_add(r37484, r37475, r37483, MPFR_RNDN);
        mpfr_const_pi(r37485, MPFR_RNDN);
        mpfr_div(r37486, r37485, r37480, MPFR_RNDN);
        mpfr_mul(r37487, r37484, r37486, MPFR_RNDN);
        mpfr_cos(r37488, r37487, MPFR_RNDN);
        mpfr_mul(r37489, r37482, r37488, MPFR_RNDN);
        mpfr_sin(r37490, r37481, MPFR_RNDN);
        mpfr_sin(r37491, r37487, MPFR_RNDN);
        mpfr_mul(r37492, r37490, r37491, MPFR_RNDN);
        mpfr_add(r37493, r37489, r37492, MPFR_RNDN);
        mpfr_mul(r37494, r37475, r37493, MPFR_RNDN);
        return mpfr_get_d(r37494, MPFR_RNDN);
}

static mpfr_t r37495, r37496, r37497, r37498, r37499, r37500, r37501, r37502, r37503, r37504, r37505, r37506, r37507, r37508, r37509, r37510, r37511, r37512, r37513, r37514;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37495, "2", 10, MPFR_RNDN);
        mpfr_init(r37496);
        mpfr_init(r37497);
        mpfr_init(r37498);
        mpfr_init(r37499);
        mpfr_init_set_str(r37500, "3", 10, MPFR_RNDN);
        mpfr_init(r37501);
        mpfr_init(r37502);
        mpfr_init_set_str(r37503, "1", 10, MPFR_RNDN);
        mpfr_init(r37504);
        mpfr_init(r37505);
        mpfr_init(r37506);
        mpfr_init(r37507);
        mpfr_init(r37508);
        mpfr_init(r37509);
        mpfr_init(r37510);
        mpfr_init(r37511);
        mpfr_init(r37512);
        mpfr_init(r37513);
        mpfr_init(r37514);
}

double f_dm(double g, double h) {
        ;
        mpfr_set_d(r37496, g, MPFR_RNDN);
        mpfr_set_d(r37497, h, MPFR_RNDN);
        mpfr_div(r37498, r37496, r37497, MPFR_RNDN);
        mpfr_acos(r37499, r37498, MPFR_RNDN);
        ;
        mpfr_div(r37501, r37499, r37500, MPFR_RNDN);
        mpfr_cos(r37502, r37501, MPFR_RNDN);
        ;
        mpfr_add(r37504, r37495, r37503, MPFR_RNDN);
        mpfr_const_pi(r37505, MPFR_RNDN);
        mpfr_div(r37506, r37505, r37500, MPFR_RNDN);
        mpfr_mul(r37507, r37504, r37506, MPFR_RNDN);
        mpfr_cos(r37508, r37507, MPFR_RNDN);
        mpfr_mul(r37509, r37502, r37508, MPFR_RNDN);
        mpfr_sin(r37510, r37501, MPFR_RNDN);
        mpfr_sin(r37511, r37507, MPFR_RNDN);
        mpfr_mul(r37512, r37510, r37511, MPFR_RNDN);
        mpfr_add(r37513, r37509, r37512, MPFR_RNDN);
        mpfr_mul(r37514, r37495, r37513, MPFR_RNDN);
        return mpfr_get_d(r37514, MPFR_RNDN);
}

