#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2-ancestry mixing, zero discriminant";

double f_if(float g, float a) {
        float r10408 = g;
        float r10409 = 2.0f;
        float r10410 = a;
        float r10411 = r10409 * r10410;
        float r10412 = r10408 / r10411;
        float r10413 = cbrt(r10412);
        return r10413;
}

double f_id(double g, double a) {
        double r10414 = g;
        double r10415 = 2.0;
        double r10416 = a;
        double r10417 = r10415 * r10416;
        double r10418 = r10414 / r10417;
        double r10419 = cbrt(r10418);
        return r10419;
}


double f_of(float g, float a) {
        float r10420 = g;
        float r10421 = cbrt(r10420);
        float r10422 = -0.5f;
        float r10423 = cbrt(r10422);
        float r10424 = r10421 * r10423;
        float r10425 = -1.0f;
        float r10426 = a;
        float r10427 = r10425 / r10426;
        float r10428 = cbrt(r10427);
        float r10429 = r10424 * r10428;
        return r10429;
}

double f_od(double g, double a) {
        double r10430 = g;
        double r10431 = cbrt(r10430);
        double r10432 = -0.5;
        double r10433 = cbrt(r10432);
        double r10434 = r10431 * r10433;
        double r10435 = -1.0;
        double r10436 = a;
        double r10437 = r10435 / r10436;
        double r10438 = cbrt(r10437);
        double r10439 = r10434 * r10438;
        return r10439;
}

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 r10440, r10441, r10442, r10443, r10444, r10445;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r10440);
        mpfr_init_set_str(r10441, "2", 10, MPFR_RNDN);
        mpfr_init(r10442);
        mpfr_init(r10443);
        mpfr_init(r10444);
        mpfr_init(r10445);
}

double f_im(double g, double a) {
        mpfr_set_d(r10440, g, MPFR_RNDN);
        ;
        mpfr_set_d(r10442, a, MPFR_RNDN);
        mpfr_mul(r10443, r10441, r10442, MPFR_RNDN);
        mpfr_div(r10444, r10440, r10443, MPFR_RNDN);
        mpfr_cbrt(r10445, r10444, MPFR_RNDN);
        return mpfr_get_d(r10445, MPFR_RNDN);
}

static mpfr_t r10446, r10447, r10448, r10449, r10450, r10451, r10452, r10453, r10454, r10455;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10446);
        mpfr_init(r10447);
        mpfr_init_set_str(r10448, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r10449);
        mpfr_init(r10450);
        mpfr_init_set_str(r10451, "-1", 10, MPFR_RNDN);
        mpfr_init(r10452);
        mpfr_init(r10453);
        mpfr_init(r10454);
        mpfr_init(r10455);
}

double f_fm(double g, double a) {
        mpfr_set_d(r10446, g, MPFR_RNDN);
        mpfr_cbrt(r10447, r10446, MPFR_RNDN);
        ;
        mpfr_cbrt(r10449, r10448, MPFR_RNDN);
        mpfr_mul(r10450, r10447, r10449, MPFR_RNDN);
        ;
        mpfr_set_d(r10452, a, MPFR_RNDN);
        mpfr_div(r10453, r10451, r10452, MPFR_RNDN);
        mpfr_cbrt(r10454, r10453, MPFR_RNDN);
        mpfr_mul(r10455, r10450, r10454, MPFR_RNDN);
        return mpfr_get_d(r10455, MPFR_RNDN);
}

static mpfr_t r10456, r10457, r10458, r10459, r10460, r10461, r10462, r10463, r10464, r10465;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r10456);
        mpfr_init(r10457);
        mpfr_init_set_str(r10458, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r10459);
        mpfr_init(r10460);
        mpfr_init_set_str(r10461, "-1", 10, MPFR_RNDN);
        mpfr_init(r10462);
        mpfr_init(r10463);
        mpfr_init(r10464);
        mpfr_init(r10465);
}

double f_dm(double g, double a) {
        mpfr_set_d(r10456, g, MPFR_RNDN);
        mpfr_cbrt(r10457, r10456, MPFR_RNDN);
        ;
        mpfr_cbrt(r10459, r10458, MPFR_RNDN);
        mpfr_mul(r10460, r10457, r10459, MPFR_RNDN);
        ;
        mpfr_set_d(r10462, a, MPFR_RNDN);
        mpfr_div(r10463, r10461, r10462, MPFR_RNDN);
        mpfr_cbrt(r10464, r10463, MPFR_RNDN);
        mpfr_mul(r10465, r10460, r10464, MPFR_RNDN);
        return mpfr_get_d(r10465, MPFR_RNDN);
}

