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

char *name = "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, D";

double f_if(float x, float y, float z) {
        float r33963 = x;
        float r33964 = y;
        float r33965 = r33963 * r33964;
        float r33966 = 2.0;
        float r33967 = r33965 / r33966;
        float r33968 = z;
        float r33969 = 8.0;
        float r33970 = r33968 / r33969;
        float r33971 = r33967 - r33970;
        return r33971;
}

double f_id(double x, double y, double z) {
        double r33972 = x;
        double r33973 = y;
        double r33974 = r33972 * r33973;
        double r33975 = 2.0;
        double r33976 = r33974 / r33975;
        double r33977 = z;
        double r33978 = 8.0;
        double r33979 = r33977 / r33978;
        double r33980 = r33976 - r33979;
        return r33980;
}


double f_of(float x, float y, float z) {
        float r33981 = x;
        float r33982 = y;
        float r33983 = r33981 * r33982;
        float r33984 = 2.0;
        float r33985 = r33983 / r33984;
        float r33986 = z;
        float r33987 = 8.0;
        float r33988 = r33986 / r33987;
        float r33989 = r33985 - r33988;
        return r33989;
}

double f_od(double x, double y, double z) {
        double r33990 = x;
        double r33991 = y;
        double r33992 = r33990 * r33991;
        double r33993 = 2.0;
        double r33994 = r33992 / r33993;
        double r33995 = z;
        double r33996 = 8.0;
        double r33997 = r33995 / r33996;
        double r33998 = r33994 - r33997;
        return r33998;
}

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 r33999, r34000, r34001, r34002, r34003, r34004, r34005, r34006, r34007;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r33999);
        mpfr_init(r34000);
        mpfr_init(r34001);
        mpfr_init_set_str(r34002, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34003);
        mpfr_init(r34004);
        mpfr_init_set_str(r34005, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34006);
        mpfr_init(r34007);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r33999, x, MPFR_RNDN);
        mpfr_set_d(r34000, y, MPFR_RNDN);
        mpfr_mul(r34001, r33999, r34000, MPFR_RNDN);
        ;
        mpfr_div(r34003, r34001, r34002, MPFR_RNDN);
        mpfr_set_d(r34004, z, MPFR_RNDN);
        ;
        mpfr_div(r34006, r34004, r34005, MPFR_RNDN);
        mpfr_sub(r34007, r34003, r34006, MPFR_RNDN);
        return mpfr_get_d(r34007, MPFR_RNDN);
}

static mpfr_t r34008, r34009, r34010, r34011, r34012, r34013, r34014, r34015, r34016;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34008);
        mpfr_init(r34009);
        mpfr_init(r34010);
        mpfr_init_set_str(r34011, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34012);
        mpfr_init(r34013);
        mpfr_init_set_str(r34014, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34015);
        mpfr_init(r34016);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34008, x, MPFR_RNDN);
        mpfr_set_d(r34009, y, MPFR_RNDN);
        mpfr_mul(r34010, r34008, r34009, MPFR_RNDN);
        ;
        mpfr_div(r34012, r34010, r34011, MPFR_RNDN);
        mpfr_set_d(r34013, z, MPFR_RNDN);
        ;
        mpfr_div(r34015, r34013, r34014, MPFR_RNDN);
        mpfr_sub(r34016, r34012, r34015, MPFR_RNDN);
        return mpfr_get_d(r34016, MPFR_RNDN);
}

static mpfr_t r34017, r34018, r34019, r34020, r34021, r34022, r34023, r34024, r34025;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34017);
        mpfr_init(r34018);
        mpfr_init(r34019);
        mpfr_init_set_str(r34020, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34021);
        mpfr_init(r34022);
        mpfr_init_set_str(r34023, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34024);
        mpfr_init(r34025);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34017, x, MPFR_RNDN);
        mpfr_set_d(r34018, y, MPFR_RNDN);
        mpfr_mul(r34019, r34017, r34018, MPFR_RNDN);
        ;
        mpfr_div(r34021, r34019, r34020, MPFR_RNDN);
        mpfr_set_d(r34022, z, MPFR_RNDN);
        ;
        mpfr_div(r34024, r34022, r34023, MPFR_RNDN);
        mpfr_sub(r34025, r34021, r34024, MPFR_RNDN);
        return mpfr_get_d(r34025, MPFR_RNDN);
}

