#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 r37128 = 2;
        float r37129 = atan2(1.0, 0.0);
        float r37130 = r37128 * r37129;
        float r37131 = 3;
        float r37132 = r37130 / r37131;
        float r37133 = g;
        float r37134 = -r37133;
        float r37135 = h;
        float r37136 = r37134 / r37135;
        float r37137 = acos(r37136);
        float r37138 = r37137 / r37131;
        float r37139 = r37132 + r37138;
        float r37140 = cos(r37139);
        float r37141 = r37128 * r37140;
        return r37141;
}

double f_id(double g, double h) {
        double r37142 = 2;
        double r37143 = atan2(1.0, 0.0);
        double r37144 = r37142 * r37143;
        double r37145 = 3;
        double r37146 = r37144 / r37145;
        double r37147 = g;
        double r37148 = -r37147;
        double r37149 = h;
        double r37150 = r37148 / r37149;
        double r37151 = acos(r37150);
        double r37152 = r37151 / r37145;
        double r37153 = r37146 + r37152;
        double r37154 = cos(r37153);
        double r37155 = r37142 * r37154;
        return r37155;
}


double f_of(float g, float h) {
        float r37156 = 2;
        float r37157 = g;
        float r37158 = h;
        float r37159 = r37157 / r37158;
        float r37160 = acos(r37159);
        float r37161 = 3;
        float r37162 = r37160 / r37161;
        float r37163 = cos(r37162);
        float r37164 = 1;
        float r37165 = r37156 + r37164;
        float r37166 = atan2(1.0, 0.0);
        float r37167 = r37166 / r37161;
        float r37168 = r37165 * r37167;
        float r37169 = cos(r37168);
        float r37170 = r37163 * r37169;
        float r37171 = sin(r37162);
        float r37172 = sin(r37168);
        float r37173 = r37171 * r37172;
        float r37174 = r37170 + r37173;
        float r37175 = r37156 * r37174;
        return r37175;
}

double f_od(double g, double h) {
        double r37176 = 2;
        double r37177 = g;
        double r37178 = h;
        double r37179 = r37177 / r37178;
        double r37180 = acos(r37179);
        double r37181 = 3;
        double r37182 = r37180 / r37181;
        double r37183 = cos(r37182);
        double r37184 = 1;
        double r37185 = r37176 + r37184;
        double r37186 = atan2(1.0, 0.0);
        double r37187 = r37186 / r37181;
        double r37188 = r37185 * r37187;
        double r37189 = cos(r37188);
        double r37190 = r37183 * r37189;
        double r37191 = sin(r37182);
        double r37192 = sin(r37188);
        double r37193 = r37191 * r37192;
        double r37194 = r37190 + r37193;
        double r37195 = r37176 * r37194;
        return r37195;
}

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 r37196, r37197, r37198, r37199, r37200, r37201, r37202, r37203, r37204, r37205, r37206, r37207, r37208, r37209;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37196, "2", 10, MPFR_RNDN);
        mpfr_init(r37197);
        mpfr_init(r37198);
        mpfr_init_set_str(r37199, "3", 10, MPFR_RNDN);
        mpfr_init(r37200);
        mpfr_init(r37201);
        mpfr_init(r37202);
        mpfr_init(r37203);
        mpfr_init(r37204);
        mpfr_init(r37205);
        mpfr_init(r37206);
        mpfr_init(r37207);
        mpfr_init(r37208);
        mpfr_init(r37209);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r37197, MPFR_RNDN);
        mpfr_mul(r37198, r37196, r37197, MPFR_RNDN);
        ;
        mpfr_div(r37200, r37198, r37199, MPFR_RNDN);
        mpfr_set_d(r37201, g, MPFR_RNDN);
        mpfr_neg(r37202, r37201, MPFR_RNDN);
        mpfr_set_d(r37203, h, MPFR_RNDN);
        mpfr_div(r37204, r37202, r37203, MPFR_RNDN);
        mpfr_acos(r37205, r37204, MPFR_RNDN);
        mpfr_div(r37206, r37205, r37199, MPFR_RNDN);
        mpfr_add(r37207, r37200, r37206, MPFR_RNDN);
        mpfr_cos(r37208, r37207, MPFR_RNDN);
        mpfr_mul(r37209, r37196, r37208, MPFR_RNDN);
        return mpfr_get_d(r37209, MPFR_RNDN);
}

static mpfr_t r37210, r37211, r37212, r37213, r37214, r37215, r37216, r37217, r37218, r37219, r37220, r37221, r37222, r37223, r37224, r37225, r37226, r37227, r37228, r37229;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37210, "2", 10, MPFR_RNDN);
        mpfr_init(r37211);
        mpfr_init(r37212);
        mpfr_init(r37213);
        mpfr_init(r37214);
        mpfr_init_set_str(r37215, "3", 10, MPFR_RNDN);
        mpfr_init(r37216);
        mpfr_init(r37217);
        mpfr_init_set_str(r37218, "1", 10, MPFR_RNDN);
        mpfr_init(r37219);
        mpfr_init(r37220);
        mpfr_init(r37221);
        mpfr_init(r37222);
        mpfr_init(r37223);
        mpfr_init(r37224);
        mpfr_init(r37225);
        mpfr_init(r37226);
        mpfr_init(r37227);
        mpfr_init(r37228);
        mpfr_init(r37229);
}

double f_fm(double g, double h) {
        ;
        mpfr_set_d(r37211, g, MPFR_RNDN);
        mpfr_set_d(r37212, h, MPFR_RNDN);
        mpfr_div(r37213, r37211, r37212, MPFR_RNDN);
        mpfr_acos(r37214, r37213, MPFR_RNDN);
        ;
        mpfr_div(r37216, r37214, r37215, MPFR_RNDN);
        mpfr_cos(r37217, r37216, MPFR_RNDN);
        ;
        mpfr_add(r37219, r37210, r37218, MPFR_RNDN);
        mpfr_const_pi(r37220, MPFR_RNDN);
        mpfr_div(r37221, r37220, r37215, MPFR_RNDN);
        mpfr_mul(r37222, r37219, r37221, MPFR_RNDN);
        mpfr_cos(r37223, r37222, MPFR_RNDN);
        mpfr_mul(r37224, r37217, r37223, MPFR_RNDN);
        mpfr_sin(r37225, r37216, MPFR_RNDN);
        mpfr_sin(r37226, r37222, MPFR_RNDN);
        mpfr_mul(r37227, r37225, r37226, MPFR_RNDN);
        mpfr_add(r37228, r37224, r37227, MPFR_RNDN);
        mpfr_mul(r37229, r37210, r37228, MPFR_RNDN);
        return mpfr_get_d(r37229, MPFR_RNDN);
}

static mpfr_t r37230, r37231, r37232, r37233, r37234, r37235, r37236, r37237, r37238, r37239, r37240, r37241, r37242, r37243, r37244, r37245, r37246, r37247, r37248, r37249;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37230, "2", 10, MPFR_RNDN);
        mpfr_init(r37231);
        mpfr_init(r37232);
        mpfr_init(r37233);
        mpfr_init(r37234);
        mpfr_init_set_str(r37235, "3", 10, MPFR_RNDN);
        mpfr_init(r37236);
        mpfr_init(r37237);
        mpfr_init_set_str(r37238, "1", 10, MPFR_RNDN);
        mpfr_init(r37239);
        mpfr_init(r37240);
        mpfr_init(r37241);
        mpfr_init(r37242);
        mpfr_init(r37243);
        mpfr_init(r37244);
        mpfr_init(r37245);
        mpfr_init(r37246);
        mpfr_init(r37247);
        mpfr_init(r37248);
        mpfr_init(r37249);
}

double f_dm(double g, double h) {
        ;
        mpfr_set_d(r37231, g, MPFR_RNDN);
        mpfr_set_d(r37232, h, MPFR_RNDN);
        mpfr_div(r37233, r37231, r37232, MPFR_RNDN);
        mpfr_acos(r37234, r37233, MPFR_RNDN);
        ;
        mpfr_div(r37236, r37234, r37235, MPFR_RNDN);
        mpfr_cos(r37237, r37236, MPFR_RNDN);
        ;
        mpfr_add(r37239, r37230, r37238, MPFR_RNDN);
        mpfr_const_pi(r37240, MPFR_RNDN);
        mpfr_div(r37241, r37240, r37235, MPFR_RNDN);
        mpfr_mul(r37242, r37239, r37241, MPFR_RNDN);
        mpfr_cos(r37243, r37242, MPFR_RNDN);
        mpfr_mul(r37244, r37237, r37243, MPFR_RNDN);
        mpfr_sin(r37245, r37236, MPFR_RNDN);
        mpfr_sin(r37246, r37242, MPFR_RNDN);
        mpfr_mul(r37247, r37245, r37246, MPFR_RNDN);
        mpfr_add(r37248, r37244, r37247, MPFR_RNDN);
        mpfr_mul(r37249, r37230, r37248, MPFR_RNDN);
        return mpfr_get_d(r37249, MPFR_RNDN);
}

