#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 r34002 = x;
        float r34003 = y;
        float r34004 = r34002 * r34003;
        float r34005 = 2.0;
        float r34006 = r34004 / r34005;
        float r34007 = z;
        float r34008 = 8.0;
        float r34009 = r34007 / r34008;
        float r34010 = r34006 - r34009;
        return r34010;
}

double f_id(double x, double y, double z) {
        double r34011 = x;
        double r34012 = y;
        double r34013 = r34011 * r34012;
        double r34014 = 2.0;
        double r34015 = r34013 / r34014;
        double r34016 = z;
        double r34017 = 8.0;
        double r34018 = r34016 / r34017;
        double r34019 = r34015 - r34018;
        return r34019;
}


double f_of(float x, float y, float z) {
        float r34020 = x;
        float r34021 = y;
        float r34022 = r34020 * r34021;
        float r34023 = 2.0;
        float r34024 = r34022 / r34023;
        float r34025 = z;
        float r34026 = 8.0;
        float r34027 = r34025 / r34026;
        float r34028 = r34024 - r34027;
        return r34028;
}

double f_od(double x, double y, double z) {
        double r34029 = x;
        double r34030 = y;
        double r34031 = r34029 * r34030;
        double r34032 = 2.0;
        double r34033 = r34031 / r34032;
        double r34034 = z;
        double r34035 = 8.0;
        double r34036 = r34034 / r34035;
        double r34037 = r34033 - r34036;
        return r34037;
}

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 r34038, r34039, r34040, r34041, r34042, r34043, r34044, r34045, r34046;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34038);
        mpfr_init(r34039);
        mpfr_init(r34040);
        mpfr_init_set_str(r34041, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34042);
        mpfr_init(r34043);
        mpfr_init_set_str(r34044, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34045);
        mpfr_init(r34046);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34038, x, MPFR_RNDN);
        mpfr_set_d(r34039, y, MPFR_RNDN);
        mpfr_mul(r34040, r34038, r34039, MPFR_RNDN);
        ;
        mpfr_div(r34042, r34040, r34041, MPFR_RNDN);
        mpfr_set_d(r34043, z, MPFR_RNDN);
        ;
        mpfr_div(r34045, r34043, r34044, MPFR_RNDN);
        mpfr_sub(r34046, r34042, r34045, MPFR_RNDN);
        return mpfr_get_d(r34046, MPFR_RNDN);
}

static mpfr_t r34047, r34048, r34049, r34050, r34051, r34052, r34053, r34054, r34055;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34047);
        mpfr_init(r34048);
        mpfr_init(r34049);
        mpfr_init_set_str(r34050, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34051);
        mpfr_init(r34052);
        mpfr_init_set_str(r34053, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34054);
        mpfr_init(r34055);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34047, x, MPFR_RNDN);
        mpfr_set_d(r34048, y, MPFR_RNDN);
        mpfr_mul(r34049, r34047, r34048, MPFR_RNDN);
        ;
        mpfr_div(r34051, r34049, r34050, MPFR_RNDN);
        mpfr_set_d(r34052, z, MPFR_RNDN);
        ;
        mpfr_div(r34054, r34052, r34053, MPFR_RNDN);
        mpfr_sub(r34055, r34051, r34054, MPFR_RNDN);
        return mpfr_get_d(r34055, MPFR_RNDN);
}

static mpfr_t r34056, r34057, r34058, r34059, r34060, r34061, r34062, r34063, r34064;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34056);
        mpfr_init(r34057);
        mpfr_init(r34058);
        mpfr_init_set_str(r34059, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34060);
        mpfr_init(r34061);
        mpfr_init_set_str(r34062, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34063);
        mpfr_init(r34064);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34056, x, MPFR_RNDN);
        mpfr_set_d(r34057, y, MPFR_RNDN);
        mpfr_mul(r34058, r34056, r34057, MPFR_RNDN);
        ;
        mpfr_div(r34060, r34058, r34059, MPFR_RNDN);
        mpfr_set_d(r34061, z, MPFR_RNDN);
        ;
        mpfr_div(r34063, r34061, r34062, MPFR_RNDN);
        mpfr_sub(r34064, r34060, r34063, MPFR_RNDN);
        return mpfr_get_d(r34064, MPFR_RNDN);
}

