#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 r37054 = g;
        float r37055 = 2;
        float r37056 = a;
        float r37057 = r37055 * r37056;
        float r37058 = r37054 / r37057;
        float r37059 = cbrt(r37058);
        return r37059;
}

double f_id(double g, double a) {
        double r37060 = g;
        double r37061 = 2;
        double r37062 = a;
        double r37063 = r37061 * r37062;
        double r37064 = r37060 / r37063;
        double r37065 = cbrt(r37064);
        return r37065;
}


double f_of(float g, float a) {
        float r37066 = 1;
        float r37067 = 2;
        float r37068 = a;
        float r37069 = r37067 * r37068;
        float r37070 = cbrt(r37069);
        float r37071 = g;
        float r37072 = cbrt(r37071);
        float r37073 = r37070 / r37072;
        float r37074 = r37066 / r37073;
        return r37074;
}

double f_od(double g, double a) {
        double r37075 = 1;
        double r37076 = 2;
        double r37077 = a;
        double r37078 = r37076 * r37077;
        double r37079 = cbrt(r37078);
        double r37080 = g;
        double r37081 = cbrt(r37080);
        double r37082 = r37079 / r37081;
        double r37083 = r37075 / r37082;
        return r37083;
}

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 r37084, r37085, r37086, r37087, r37088, r37089;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r37084);
        mpfr_init_set_str(r37085, "2", 10, MPFR_RNDN);
        mpfr_init(r37086);
        mpfr_init(r37087);
        mpfr_init(r37088);
        mpfr_init(r37089);
}

double f_im(double g, double a) {
        mpfr_set_d(r37084, g, MPFR_RNDN);
        ;
        mpfr_set_d(r37086, a, MPFR_RNDN);
        mpfr_mul(r37087, r37085, r37086, MPFR_RNDN);
        mpfr_div(r37088, r37084, r37087, MPFR_RNDN);
        mpfr_cbrt(r37089, r37088, MPFR_RNDN);
        return mpfr_get_d(r37089, MPFR_RNDN);
}

static mpfr_t r37090, r37091, r37092, r37093, r37094, r37095, r37096, r37097, r37098;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37090, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37091, "2", 10, MPFR_RNDN);
        mpfr_init(r37092);
        mpfr_init(r37093);
        mpfr_init(r37094);
        mpfr_init(r37095);
        mpfr_init(r37096);
        mpfr_init(r37097);
        mpfr_init(r37098);
}

double f_fm(double g, double a) {
        ;
        ;
        mpfr_set_d(r37092, a, MPFR_RNDN);
        mpfr_mul(r37093, r37091, r37092, MPFR_RNDN);
        mpfr_cbrt(r37094, r37093, MPFR_RNDN);
        mpfr_set_d(r37095, g, MPFR_RNDN);
        mpfr_cbrt(r37096, r37095, MPFR_RNDN);
        mpfr_div(r37097, r37094, r37096, MPFR_RNDN);
        mpfr_div(r37098, r37090, r37097, MPFR_RNDN);
        return mpfr_get_d(r37098, MPFR_RNDN);
}

static mpfr_t r37099, r37100, r37101, r37102, r37103, r37104, r37105, r37106, r37107;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37099, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37100, "2", 10, MPFR_RNDN);
        mpfr_init(r37101);
        mpfr_init(r37102);
        mpfr_init(r37103);
        mpfr_init(r37104);
        mpfr_init(r37105);
        mpfr_init(r37106);
        mpfr_init(r37107);
}

double f_dm(double g, double a) {
        ;
        ;
        mpfr_set_d(r37101, a, MPFR_RNDN);
        mpfr_mul(r37102, r37100, r37101, MPFR_RNDN);
        mpfr_cbrt(r37103, r37102, MPFR_RNDN);
        mpfr_set_d(r37104, g, MPFR_RNDN);
        mpfr_cbrt(r37105, r37104, MPFR_RNDN);
        mpfr_div(r37106, r37103, r37105, MPFR_RNDN);
        mpfr_div(r37107, r37099, r37106, MPFR_RNDN);
        return mpfr_get_d(r37107, MPFR_RNDN);
}

