#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 r37598 = g;
        float r37599 = 2;
        float r37600 = a;
        float r37601 = r37599 * r37600;
        float r37602 = r37598 / r37601;
        float r37603 = cbrt(r37602);
        return r37603;
}

double f_id(double g, double a) {
        double r37604 = g;
        double r37605 = 2;
        double r37606 = a;
        double r37607 = r37605 * r37606;
        double r37608 = r37604 / r37607;
        double r37609 = cbrt(r37608);
        return r37609;
}


double f_of(float g, float a) {
        float r37610 = 1;
        float r37611 = 2;
        float r37612 = a;
        float r37613 = r37611 * r37612;
        float r37614 = cbrt(r37613);
        float r37615 = g;
        float r37616 = cbrt(r37615);
        float r37617 = r37614 / r37616;
        float r37618 = r37610 / r37617;
        return r37618;
}

double f_od(double g, double a) {
        double r37619 = 1;
        double r37620 = 2;
        double r37621 = a;
        double r37622 = r37620 * r37621;
        double r37623 = cbrt(r37622);
        double r37624 = g;
        double r37625 = cbrt(r37624);
        double r37626 = r37623 / r37625;
        double r37627 = r37619 / r37626;
        return r37627;
}

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 r37628, r37629, r37630, r37631, r37632, r37633;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r37628);
        mpfr_init_set_str(r37629, "2", 10, MPFR_RNDN);
        mpfr_init(r37630);
        mpfr_init(r37631);
        mpfr_init(r37632);
        mpfr_init(r37633);
}

double f_im(double g, double a) {
        mpfr_set_d(r37628, g, MPFR_RNDN);
        ;
        mpfr_set_d(r37630, a, MPFR_RNDN);
        mpfr_mul(r37631, r37629, r37630, MPFR_RNDN);
        mpfr_div(r37632, r37628, r37631, MPFR_RNDN);
        mpfr_cbrt(r37633, r37632, MPFR_RNDN);
        return mpfr_get_d(r37633, MPFR_RNDN);
}

static mpfr_t r37634, r37635, r37636, r37637, r37638, r37639, r37640, r37641, r37642;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37634, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37635, "2", 10, MPFR_RNDN);
        mpfr_init(r37636);
        mpfr_init(r37637);
        mpfr_init(r37638);
        mpfr_init(r37639);
        mpfr_init(r37640);
        mpfr_init(r37641);
        mpfr_init(r37642);
}

double f_fm(double g, double a) {
        ;
        ;
        mpfr_set_d(r37636, a, MPFR_RNDN);
        mpfr_mul(r37637, r37635, r37636, MPFR_RNDN);
        mpfr_cbrt(r37638, r37637, MPFR_RNDN);
        mpfr_set_d(r37639, g, MPFR_RNDN);
        mpfr_cbrt(r37640, r37639, MPFR_RNDN);
        mpfr_div(r37641, r37638, r37640, MPFR_RNDN);
        mpfr_div(r37642, r37634, r37641, MPFR_RNDN);
        return mpfr_get_d(r37642, MPFR_RNDN);
}

static mpfr_t r37643, r37644, r37645, r37646, r37647, r37648, r37649, r37650, r37651;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r37643, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r37644, "2", 10, MPFR_RNDN);
        mpfr_init(r37645);
        mpfr_init(r37646);
        mpfr_init(r37647);
        mpfr_init(r37648);
        mpfr_init(r37649);
        mpfr_init(r37650);
        mpfr_init(r37651);
}

double f_dm(double g, double a) {
        ;
        ;
        mpfr_set_d(r37645, a, MPFR_RNDN);
        mpfr_mul(r37646, r37644, r37645, MPFR_RNDN);
        mpfr_cbrt(r37647, r37646, MPFR_RNDN);
        mpfr_set_d(r37648, g, MPFR_RNDN);
        mpfr_cbrt(r37649, r37648, MPFR_RNDN);
        mpfr_div(r37650, r37647, r37649, MPFR_RNDN);
        mpfr_div(r37651, r37643, r37650, MPFR_RNDN);
        return mpfr_get_d(r37651, MPFR_RNDN);
}

