#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 r27108 = 2;
        float r27109 = atan2(1.0, 0.0);
        float r27110 = r27108 * r27109;
        float r27111 = 3;
        float r27112 = r27110 / r27111;
        float r27113 = g;
        float r27114 = -r27113;
        float r27115 = h;
        float r27116 = r27114 / r27115;
        float r27117 = acos(r27116);
        float r27118 = r27117 / r27111;
        float r27119 = r27112 + r27118;
        float r27120 = cos(r27119);
        float r27121 = r27108 * r27120;
        return r27121;
}

double f_id(double g, double h) {
        double r27122 = 2;
        double r27123 = atan2(1.0, 0.0);
        double r27124 = r27122 * r27123;
        double r27125 = 3;
        double r27126 = r27124 / r27125;
        double r27127 = g;
        double r27128 = -r27127;
        double r27129 = h;
        double r27130 = r27128 / r27129;
        double r27131 = acos(r27130);
        double r27132 = r27131 / r27125;
        double r27133 = r27126 + r27132;
        double r27134 = cos(r27133);
        double r27135 = r27122 * r27134;
        return r27135;
}


double f_of(float g, float h) {
        float r27136 = 2;
        float r27137 = atan2(1.0, 0.0);
        float r27138 = r27136 * r27137;
        float r27139 = 3;
        float r27140 = r27138 / r27139;
        float r27141 = cos(r27140);
        float r27142 = cbrt(r27141);
        float r27143 = r27142 * r27142;
        float r27144 = r27143 * r27142;
        float r27145 = g;
        float r27146 = -r27145;
        float r27147 = h;
        float r27148 = r27146 / r27147;
        float r27149 = acos(r27148);
        float r27150 = r27149 / r27139;
        float r27151 = cos(r27150);
        float r27152 = r27144 * r27151;
        float r27153 = sin(r27140);
        float r27154 = sin(r27150);
        float r27155 = r27153 * r27154;
        float r27156 = r27152 - r27155;
        float r27157 = r27136 * r27156;
        return r27157;
}

double f_od(double g, double h) {
        double r27158 = 2;
        double r27159 = atan2(1.0, 0.0);
        double r27160 = r27158 * r27159;
        double r27161 = 3;
        double r27162 = r27160 / r27161;
        double r27163 = cos(r27162);
        double r27164 = cbrt(r27163);
        double r27165 = r27164 * r27164;
        double r27166 = r27165 * r27164;
        double r27167 = g;
        double r27168 = -r27167;
        double r27169 = h;
        double r27170 = r27168 / r27169;
        double r27171 = acos(r27170);
        double r27172 = r27171 / r27161;
        double r27173 = cos(r27172);
        double r27174 = r27166 * r27173;
        double r27175 = sin(r27162);
        double r27176 = sin(r27172);
        double r27177 = r27175 * r27176;
        double r27178 = r27174 - r27177;
        double r27179 = r27158 * r27178;
        return r27179;
}

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 r27180, r27181, r27182, r27183, r27184, r27185, r27186, r27187, r27188, r27189, r27190, r27191, r27192, r27193;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27180, "2", 10, MPFR_RNDN);
        mpfr_init(r27181);
        mpfr_init(r27182);
        mpfr_init_set_str(r27183, "3", 10, MPFR_RNDN);
        mpfr_init(r27184);
        mpfr_init(r27185);
        mpfr_init(r27186);
        mpfr_init(r27187);
        mpfr_init(r27188);
        mpfr_init(r27189);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r27181, MPFR_RNDN);
        mpfr_mul(r27182, r27180, r27181, MPFR_RNDN);
        ;
        mpfr_div(r27184, r27182, r27183, MPFR_RNDN);
        mpfr_set_d(r27185, g, MPFR_RNDN);
        mpfr_neg(r27186, r27185, MPFR_RNDN);
        mpfr_set_d(r27187, h, MPFR_RNDN);
        mpfr_div(r27188, r27186, r27187, MPFR_RNDN);
        mpfr_acos(r27189, r27188, MPFR_RNDN);
        mpfr_div(r27190, r27189, r27183, MPFR_RNDN);
        mpfr_add(r27191, r27184, r27190, MPFR_RNDN);
        mpfr_cos(r27192, r27191, MPFR_RNDN);
        mpfr_mul(r27193, r27180, r27192, MPFR_RNDN);
        return mpfr_get_d(r27193, MPFR_RNDN);
}

static mpfr_t r27194, r27195, r27196, r27197, r27198, r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210, r27211, r27212, r27213, r27214, r27215;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27194, "2", 10, MPFR_RNDN);
        mpfr_init(r27195);
        mpfr_init(r27196);
        mpfr_init_set_str(r27197, "3", 10, MPFR_RNDN);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init(r27210);
        mpfr_init(r27211);
        mpfr_init(r27212);
        mpfr_init(r27213);
        mpfr_init(r27214);
        mpfr_init(r27215);
}

double f_fm(double g, double h) {
        ;
        mpfr_const_pi(r27195, MPFR_RNDN);
        mpfr_mul(r27196, r27194, r27195, MPFR_RNDN);
        ;
        mpfr_div(r27198, r27196, r27197, MPFR_RNDN);
        mpfr_cos(r27199, r27198, MPFR_RNDN);
        mpfr_cbrt(r27200, r27199, MPFR_RNDN);
        mpfr_mul(r27201, r27200, r27200, MPFR_RNDN);
        mpfr_mul(r27202, r27201, r27200, MPFR_RNDN);
        mpfr_set_d(r27203, g, MPFR_RNDN);
        mpfr_neg(r27204, r27203, MPFR_RNDN);
        mpfr_set_d(r27205, h, MPFR_RNDN);
        mpfr_div(r27206, r27204, r27205, MPFR_RNDN);
        mpfr_acos(r27207, r27206, MPFR_RNDN);
        mpfr_div(r27208, r27207, r27197, MPFR_RNDN);
        mpfr_cos(r27209, r27208, MPFR_RNDN);
        mpfr_mul(r27210, r27202, r27209, MPFR_RNDN);
        mpfr_sin(r27211, r27198, MPFR_RNDN);
        mpfr_sin(r27212, r27208, MPFR_RNDN);
        mpfr_mul(r27213, r27211, r27212, MPFR_RNDN);
        mpfr_sub(r27214, r27210, r27213, MPFR_RNDN);
        mpfr_mul(r27215, r27194, r27214, MPFR_RNDN);
        return mpfr_get_d(r27215, MPFR_RNDN);
}

static mpfr_t r27216, r27217, r27218, r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231, r27232, r27233, r27234, r27235, r27236, r27237;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r27216, "2", 10, MPFR_RNDN);
        mpfr_init(r27217);
        mpfr_init(r27218);
        mpfr_init_set_str(r27219, "3", 10, MPFR_RNDN);
        mpfr_init(r27220);
        mpfr_init(r27221);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init(r27226);
        mpfr_init(r27227);
        mpfr_init(r27228);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init(r27231);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
        mpfr_init(r27236);
        mpfr_init(r27237);
}

double f_dm(double g, double h) {
        ;
        mpfr_const_pi(r27217, MPFR_RNDN);
        mpfr_mul(r27218, r27216, r27217, MPFR_RNDN);
        ;
        mpfr_div(r27220, r27218, r27219, MPFR_RNDN);
        mpfr_cos(r27221, r27220, MPFR_RNDN);
        mpfr_cbrt(r27222, r27221, MPFR_RNDN);
        mpfr_mul(r27223, r27222, r27222, MPFR_RNDN);
        mpfr_mul(r27224, r27223, r27222, MPFR_RNDN);
        mpfr_set_d(r27225, g, MPFR_RNDN);
        mpfr_neg(r27226, r27225, MPFR_RNDN);
        mpfr_set_d(r27227, h, MPFR_RNDN);
        mpfr_div(r27228, r27226, r27227, MPFR_RNDN);
        mpfr_acos(r27229, r27228, MPFR_RNDN);
        mpfr_div(r27230, r27229, r27219, MPFR_RNDN);
        mpfr_cos(r27231, r27230, MPFR_RNDN);
        mpfr_mul(r27232, r27224, r27231, MPFR_RNDN);
        mpfr_sin(r27233, r27220, MPFR_RNDN);
        mpfr_sin(r27234, r27230, MPFR_RNDN);
        mpfr_mul(r27235, r27233, r27234, MPFR_RNDN);
        mpfr_sub(r27236, r27232, r27235, MPFR_RNDN);
        mpfr_mul(r27237, r27216, r27236, MPFR_RNDN);
        return mpfr_get_d(r27237, MPFR_RNDN);
}

