#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 r37673 = 2;
        float r37674 = atan2(1.0, 0.0);
        float r37675 = r37673 * r37674;
        float r37676 = 3;
        float r37677 = r37675 / r37676;
        float r37678 = g;
        float r37679 = -r37678;
        float r37680 = h;
        float r37681 = r37679 / r37680;
        float r37682 = acos(r37681);
        float r37683 = r37682 / r37676;
        float r37684 = r37677 + r37683;
        float r37685 = cos(r37684);
        float r37686 = r37673 * r37685;
        return r37686;
}

double f_id(double g, double h) {
        double r37687 = 2;
        double r37688 = atan2(1.0, 0.0);
        double r37689 = r37687 * r37688;
        double r37690 = 3;
        double r37691 = r37689 / r37690;
        double r37692 = g;
        double r37693 = -r37692;
        double r37694 = h;
        double r37695 = r37693 / r37694;
        double r37696 = acos(r37695);
        double r37697 = r37696 / r37690;
        double r37698 = r37691 + r37697;
        double r37699 = cos(r37698);
        double r37700 = r37687 * r37699;
        return r37700;
}


double f_of(float g, float h) {
        float r37701 = 2;
        float r37702 = g;
        float r37703 = h;
        float r37704 = r37702 / r37703;
        float r37705 = acos(r37704);
        float r37706 = 3;
        float r37707 = r37705 / r37706;
        float r37708 = cos(r37707);
        float r37709 = 1;
        float r37710 = r37701 + r37709;
        float r37711 = atan2(1.0, 0.0);
        float r37712 = r37711 / r37706;
        float r37713 = r37710 * r37712;
        float r37714 = cos(r37713);
        float r37715 = r37708 * r37714;
        float r37716 = sin(r37707);
        float r37717 = sin(r37713);
        float r37718 = r37716 * r37717;
        float r37719 = r37715 + r37718;
        float r37720 = r37701 * r37719;
        return r37720;
}

double f_od(double g, double h) {
        double r37721 = 2;
        double r37722 = g;
        double r37723 = h;
        double r37724 = r37722 / r37723;
        double r37725 = acos(r37724);
        double r37726 = 3;
        double r37727 = r37725 / r37726;
        double r37728 = cos(r37727);
        double r37729 = 1;
        double r37730 = r37721 + r37729;
        double r37731 = atan2(1.0, 0.0);
        double r37732 = r37731 / r37726;
        double r37733 = r37730 * r37732;
        double r37734 = cos(r37733);
        double r37735 = r37728 * r37734;
        double r37736 = sin(r37727);
        double r37737 = sin(r37733);
        double r37738 = r37736 * r37737;
        double r37739 = r37735 + r37738;
        double r37740 = r37721 * r37739;
        return r37740;
}

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 r37741, r37742, r37743, r37744, r37745, r37746, r37747, r37748, r37749, r37750, r37751, r37752, r37753, r37754;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37741, "2", 10, MPFR_RNDN);
        mpfr_init(r37742);
        mpfr_init(r37743);
        mpfr_init_set_str(r37744, "3", 10, MPFR_RNDN);
        mpfr_init(r37745);
        mpfr_init(r37746);
        mpfr_init(r37747);
        mpfr_init(r37748);
        mpfr_init(r37749);
        mpfr_init(r37750);
        mpfr_init(r37751);
        mpfr_init(r37752);
        mpfr_init(r37753);
        mpfr_init(r37754);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r37742, MPFR_RNDN);
        mpfr_mul(r37743, r37741, r37742, MPFR_RNDN);
        ;
        mpfr_div(r37745, r37743, r37744, MPFR_RNDN);
        mpfr_set_d(r37746, g, MPFR_RNDN);
        mpfr_neg(r37747, r37746, MPFR_RNDN);
        mpfr_set_d(r37748, h, MPFR_RNDN);
        mpfr_div(r37749, r37747, r37748, MPFR_RNDN);
        mpfr_acos(r37750, r37749, MPFR_RNDN);
        mpfr_div(r37751, r37750, r37744, MPFR_RNDN);
        mpfr_add(r37752, r37745, r37751, MPFR_RNDN);
        mpfr_cos(r37753, r37752, MPFR_RNDN);
        mpfr_mul(r37754, r37741, r37753, MPFR_RNDN);
        return mpfr_get_d(r37754, MPFR_RNDN);
}

static mpfr_t r37755, r37756, r37757, r37758, r37759, r37760, r37761, r37762, r37763, r37764, r37765, r37766, r37767, r37768, r37769, r37770, r37771, r37772, r37773, r37774;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37755, "2", 10, MPFR_RNDN);
        mpfr_init(r37756);
        mpfr_init(r37757);
        mpfr_init(r37758);
        mpfr_init(r37759);
        mpfr_init_set_str(r37760, "3", 10, MPFR_RNDN);
        mpfr_init(r37761);
        mpfr_init(r37762);
        mpfr_init_set_str(r37763, "1", 10, MPFR_RNDN);
        mpfr_init(r37764);
        mpfr_init(r37765);
        mpfr_init(r37766);
        mpfr_init(r37767);
        mpfr_init(r37768);
        mpfr_init(r37769);
        mpfr_init(r37770);
        mpfr_init(r37771);
        mpfr_init(r37772);
        mpfr_init(r37773);
        mpfr_init(r37774);
}

double f_fm(double g, double h) {
        ;
        mpfr_set_d(r37756, g, MPFR_RNDN);
        mpfr_set_d(r37757, h, MPFR_RNDN);
        mpfr_div(r37758, r37756, r37757, MPFR_RNDN);
        mpfr_acos(r37759, r37758, MPFR_RNDN);
        ;
        mpfr_div(r37761, r37759, r37760, MPFR_RNDN);
        mpfr_cos(r37762, r37761, MPFR_RNDN);
        ;
        mpfr_add(r37764, r37755, r37763, MPFR_RNDN);
        mpfr_const_pi(r37765, MPFR_RNDN);
        mpfr_div(r37766, r37765, r37760, MPFR_RNDN);
        mpfr_mul(r37767, r37764, r37766, MPFR_RNDN);
        mpfr_cos(r37768, r37767, MPFR_RNDN);
        mpfr_mul(r37769, r37762, r37768, MPFR_RNDN);
        mpfr_sin(r37770, r37761, MPFR_RNDN);
        mpfr_sin(r37771, r37767, MPFR_RNDN);
        mpfr_mul(r37772, r37770, r37771, MPFR_RNDN);
        mpfr_add(r37773, r37769, r37772, MPFR_RNDN);
        mpfr_mul(r37774, r37755, r37773, MPFR_RNDN);
        return mpfr_get_d(r37774, MPFR_RNDN);
}

static mpfr_t r37775, r37776, r37777, r37778, r37779, r37780, r37781, r37782, r37783, r37784, r37785, r37786, r37787, r37788, r37789, r37790, r37791, r37792, r37793, r37794;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37775, "2", 10, MPFR_RNDN);
        mpfr_init(r37776);
        mpfr_init(r37777);
        mpfr_init(r37778);
        mpfr_init(r37779);
        mpfr_init_set_str(r37780, "3", 10, MPFR_RNDN);
        mpfr_init(r37781);
        mpfr_init(r37782);
        mpfr_init_set_str(r37783, "1", 10, MPFR_RNDN);
        mpfr_init(r37784);
        mpfr_init(r37785);
        mpfr_init(r37786);
        mpfr_init(r37787);
        mpfr_init(r37788);
        mpfr_init(r37789);
        mpfr_init(r37790);
        mpfr_init(r37791);
        mpfr_init(r37792);
        mpfr_init(r37793);
        mpfr_init(r37794);
}

double f_dm(double g, double h) {
        ;
        mpfr_set_d(r37776, g, MPFR_RNDN);
        mpfr_set_d(r37777, h, MPFR_RNDN);
        mpfr_div(r37778, r37776, r37777, MPFR_RNDN);
        mpfr_acos(r37779, r37778, MPFR_RNDN);
        ;
        mpfr_div(r37781, r37779, r37780, MPFR_RNDN);
        mpfr_cos(r37782, r37781, MPFR_RNDN);
        ;
        mpfr_add(r37784, r37775, r37783, MPFR_RNDN);
        mpfr_const_pi(r37785, MPFR_RNDN);
        mpfr_div(r37786, r37785, r37780, MPFR_RNDN);
        mpfr_mul(r37787, r37784, r37786, MPFR_RNDN);
        mpfr_cos(r37788, r37787, MPFR_RNDN);
        mpfr_mul(r37789, r37782, r37788, MPFR_RNDN);
        mpfr_sin(r37790, r37781, MPFR_RNDN);
        mpfr_sin(r37791, r37787, MPFR_RNDN);
        mpfr_mul(r37792, r37790, r37791, MPFR_RNDN);
        mpfr_add(r37793, r37789, r37792, MPFR_RNDN);
        mpfr_mul(r37794, r37775, r37793, MPFR_RNDN);
        return mpfr_get_d(r37794, MPFR_RNDN);
}

