#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 r27163 = 2;
        float r27164 = atan2(1.0, 0.0);
        float r27165 = r27163 * r27164;
        float r27166 = 3;
        float r27167 = r27165 / r27166;
        float r27168 = g;
        float r27169 = -r27168;
        float r27170 = h;
        float r27171 = r27169 / r27170;
        float r27172 = acos(r27171);
        float r27173 = r27172 / r27166;
        float r27174 = r27167 + r27173;
        float r27175 = cos(r27174);
        float r27176 = r27163 * r27175;
        return r27176;
}

double f_id(double g, double h) {
        double r27177 = 2;
        double r27178 = atan2(1.0, 0.0);
        double r27179 = r27177 * r27178;
        double r27180 = 3;
        double r27181 = r27179 / r27180;
        double r27182 = g;
        double r27183 = -r27182;
        double r27184 = h;
        double r27185 = r27183 / r27184;
        double r27186 = acos(r27185);
        double r27187 = r27186 / r27180;
        double r27188 = r27181 + r27187;
        double r27189 = cos(r27188);
        double r27190 = r27177 * r27189;
        return r27190;
}


double f_of(float g, float h) {
        float r27191 = 2;
        float r27192 = atan2(1.0, 0.0);
        float r27193 = r27191 * r27192;
        float r27194 = 3;
        float r27195 = r27193 / r27194;
        float r27196 = cos(r27195);
        float r27197 = cbrt(r27196);
        float r27198 = r27197 * r27197;
        float r27199 = r27198 * r27197;
        float r27200 = g;
        float r27201 = -r27200;
        float r27202 = h;
        float r27203 = r27201 / r27202;
        float r27204 = acos(r27203);
        float r27205 = r27204 / r27194;
        float r27206 = cos(r27205);
        float r27207 = r27199 * r27206;
        float r27208 = sin(r27195);
        float r27209 = sin(r27205);
        float r27210 = r27208 * r27209;
        float r27211 = r27207 - r27210;
        float r27212 = r27191 * r27211;
        return r27212;
}

double f_od(double g, double h) {
        double r27213 = 2;
        double r27214 = atan2(1.0, 0.0);
        double r27215 = r27213 * r27214;
        double r27216 = 3;
        double r27217 = r27215 / r27216;
        double r27218 = cos(r27217);
        double r27219 = cbrt(r27218);
        double r27220 = r27219 * r27219;
        double r27221 = r27220 * r27219;
        double r27222 = g;
        double r27223 = -r27222;
        double r27224 = h;
        double r27225 = r27223 / r27224;
        double r27226 = acos(r27225);
        double r27227 = r27226 / r27216;
        double r27228 = cos(r27227);
        double r27229 = r27221 * r27228;
        double r27230 = sin(r27217);
        double r27231 = sin(r27227);
        double r27232 = r27230 * r27231;
        double r27233 = r27229 - r27232;
        double r27234 = r27213 * r27233;
        return r27234;
}

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 r27235, r27236, r27237, r27238, r27239, r27240, r27241, r27242, r27243, r27244, r27245, r27246, r27247, r27248;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27235, "2", 10, MPFR_RNDN);
        mpfr_init(r27236);
        mpfr_init(r27237);
        mpfr_init_set_str(r27238, "3", 10, MPFR_RNDN);
        mpfr_init(r27239);
        mpfr_init(r27240);
        mpfr_init(r27241);
        mpfr_init(r27242);
        mpfr_init(r27243);
        mpfr_init(r27244);
        mpfr_init(r27245);
        mpfr_init(r27246);
        mpfr_init(r27247);
        mpfr_init(r27248);
}

double f_im(double g, double h) {
        ;
        mpfr_const_pi(r27236, MPFR_RNDN);
        mpfr_mul(r27237, r27235, r27236, MPFR_RNDN);
        ;
        mpfr_div(r27239, r27237, r27238, MPFR_RNDN);
        mpfr_set_d(r27240, g, MPFR_RNDN);
        mpfr_neg(r27241, r27240, MPFR_RNDN);
        mpfr_set_d(r27242, h, MPFR_RNDN);
        mpfr_div(r27243, r27241, r27242, MPFR_RNDN);
        mpfr_acos(r27244, r27243, MPFR_RNDN);
        mpfr_div(r27245, r27244, r27238, MPFR_RNDN);
        mpfr_add(r27246, r27239, r27245, MPFR_RNDN);
        mpfr_cos(r27247, r27246, MPFR_RNDN);
        mpfr_mul(r27248, r27235, r27247, MPFR_RNDN);
        return mpfr_get_d(r27248, MPFR_RNDN);
}

static mpfr_t r27249, r27250, r27251, r27252, r27253, r27254, r27255, r27256, r27257, r27258, r27259, r27260, r27261, r27262, r27263, r27264, r27265, r27266, r27267, r27268, r27269, r27270;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27249, "2", 10, MPFR_RNDN);
        mpfr_init(r27250);
        mpfr_init(r27251);
        mpfr_init_set_str(r27252, "3", 10, MPFR_RNDN);
        mpfr_init(r27253);
        mpfr_init(r27254);
        mpfr_init(r27255);
        mpfr_init(r27256);
        mpfr_init(r27257);
        mpfr_init(r27258);
        mpfr_init(r27259);
        mpfr_init(r27260);
        mpfr_init(r27261);
        mpfr_init(r27262);
        mpfr_init(r27263);
        mpfr_init(r27264);
        mpfr_init(r27265);
        mpfr_init(r27266);
        mpfr_init(r27267);
        mpfr_init(r27268);
        mpfr_init(r27269);
        mpfr_init(r27270);
}

double f_fm(double g, double h) {
        ;
        mpfr_const_pi(r27250, MPFR_RNDN);
        mpfr_mul(r27251, r27249, r27250, MPFR_RNDN);
        ;
        mpfr_div(r27253, r27251, r27252, MPFR_RNDN);
        mpfr_cos(r27254, r27253, MPFR_RNDN);
        mpfr_cbrt(r27255, r27254, MPFR_RNDN);
        mpfr_mul(r27256, r27255, r27255, MPFR_RNDN);
        mpfr_mul(r27257, r27256, r27255, MPFR_RNDN);
        mpfr_set_d(r27258, g, MPFR_RNDN);
        mpfr_neg(r27259, r27258, MPFR_RNDN);
        mpfr_set_d(r27260, h, MPFR_RNDN);
        mpfr_div(r27261, r27259, r27260, MPFR_RNDN);
        mpfr_acos(r27262, r27261, MPFR_RNDN);
        mpfr_div(r27263, r27262, r27252, MPFR_RNDN);
        mpfr_cos(r27264, r27263, MPFR_RNDN);
        mpfr_mul(r27265, r27257, r27264, MPFR_RNDN);
        mpfr_sin(r27266, r27253, MPFR_RNDN);
        mpfr_sin(r27267, r27263, MPFR_RNDN);
        mpfr_mul(r27268, r27266, r27267, MPFR_RNDN);
        mpfr_sub(r27269, r27265, r27268, MPFR_RNDN);
        mpfr_mul(r27270, r27249, r27269, MPFR_RNDN);
        return mpfr_get_d(r27270, MPFR_RNDN);
}

static mpfr_t r27271, r27272, r27273, r27274, r27275, r27276, r27277, r27278, r27279, r27280, r27281, r27282, r27283, r27284, r27285, r27286, r27287, r27288, r27289, r27290, r27291, r27292;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r27271, "2", 10, MPFR_RNDN);
        mpfr_init(r27272);
        mpfr_init(r27273);
        mpfr_init_set_str(r27274, "3", 10, MPFR_RNDN);
        mpfr_init(r27275);
        mpfr_init(r27276);
        mpfr_init(r27277);
        mpfr_init(r27278);
        mpfr_init(r27279);
        mpfr_init(r27280);
        mpfr_init(r27281);
        mpfr_init(r27282);
        mpfr_init(r27283);
        mpfr_init(r27284);
        mpfr_init(r27285);
        mpfr_init(r27286);
        mpfr_init(r27287);
        mpfr_init(r27288);
        mpfr_init(r27289);
        mpfr_init(r27290);
        mpfr_init(r27291);
        mpfr_init(r27292);
}

double f_dm(double g, double h) {
        ;
        mpfr_const_pi(r27272, MPFR_RNDN);
        mpfr_mul(r27273, r27271, r27272, MPFR_RNDN);
        ;
        mpfr_div(r27275, r27273, r27274, MPFR_RNDN);
        mpfr_cos(r27276, r27275, MPFR_RNDN);
        mpfr_cbrt(r27277, r27276, MPFR_RNDN);
        mpfr_mul(r27278, r27277, r27277, MPFR_RNDN);
        mpfr_mul(r27279, r27278, r27277, MPFR_RNDN);
        mpfr_set_d(r27280, g, MPFR_RNDN);
        mpfr_neg(r27281, r27280, MPFR_RNDN);
        mpfr_set_d(r27282, h, MPFR_RNDN);
        mpfr_div(r27283, r27281, r27282, MPFR_RNDN);
        mpfr_acos(r27284, r27283, MPFR_RNDN);
        mpfr_div(r27285, r27284, r27274, MPFR_RNDN);
        mpfr_cos(r27286, r27285, MPFR_RNDN);
        mpfr_mul(r27287, r27279, r27286, MPFR_RNDN);
        mpfr_sin(r27288, r27275, MPFR_RNDN);
        mpfr_sin(r27289, r27285, MPFR_RNDN);
        mpfr_mul(r27290, r27288, r27289, MPFR_RNDN);
        mpfr_sub(r27291, r27287, r27290, MPFR_RNDN);
        mpfr_mul(r27292, r27271, r27291, MPFR_RNDN);
        return mpfr_get_d(r27292, MPFR_RNDN);
}

