#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 r34196 = x;
        float r34197 = y;
        float r34198 = r34196 * r34197;
        float r34199 = 2.0;
        float r34200 = r34198 / r34199;
        float r34201 = z;
        float r34202 = 8.0;
        float r34203 = r34201 / r34202;
        float r34204 = r34200 - r34203;
        return r34204;
}

double f_id(double x, double y, double z) {
        double r34205 = x;
        double r34206 = y;
        double r34207 = r34205 * r34206;
        double r34208 = 2.0;
        double r34209 = r34207 / r34208;
        double r34210 = z;
        double r34211 = 8.0;
        double r34212 = r34210 / r34211;
        double r34213 = r34209 - r34212;
        return r34213;
}


double f_of(float x, float y, float z) {
        float r34214 = x;
        float r34215 = y;
        float r34216 = r34214 * r34215;
        float r34217 = 2.0;
        float r34218 = r34216 / r34217;
        float r34219 = z;
        float r34220 = 8.0;
        float r34221 = r34219 / r34220;
        float r34222 = r34218 - r34221;
        return r34222;
}

double f_od(double x, double y, double z) {
        double r34223 = x;
        double r34224 = y;
        double r34225 = r34223 * r34224;
        double r34226 = 2.0;
        double r34227 = r34225 / r34226;
        double r34228 = z;
        double r34229 = 8.0;
        double r34230 = r34228 / r34229;
        double r34231 = r34227 - r34230;
        return r34231;
}

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 r34232, r34233, r34234, r34235, r34236, r34237, r34238, r34239, r34240;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34232);
        mpfr_init(r34233);
        mpfr_init(r34234);
        mpfr_init_set_str(r34235, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34236);
        mpfr_init(r34237);
        mpfr_init_set_str(r34238, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34239);
        mpfr_init(r34240);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34232, x, MPFR_RNDN);
        mpfr_set_d(r34233, y, MPFR_RNDN);
        mpfr_mul(r34234, r34232, r34233, MPFR_RNDN);
        ;
        mpfr_div(r34236, r34234, r34235, MPFR_RNDN);
        mpfr_set_d(r34237, z, MPFR_RNDN);
        ;
        mpfr_div(r34239, r34237, r34238, MPFR_RNDN);
        mpfr_sub(r34240, r34236, r34239, MPFR_RNDN);
        return mpfr_get_d(r34240, MPFR_RNDN);
}

static mpfr_t r34241, r34242, r34243, r34244, r34245, r34246, r34247, r34248, r34249;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34241);
        mpfr_init(r34242);
        mpfr_init(r34243);
        mpfr_init_set_str(r34244, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34245);
        mpfr_init(r34246);
        mpfr_init_set_str(r34247, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34248);
        mpfr_init(r34249);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34241, x, MPFR_RNDN);
        mpfr_set_d(r34242, y, MPFR_RNDN);
        mpfr_mul(r34243, r34241, r34242, MPFR_RNDN);
        ;
        mpfr_div(r34245, r34243, r34244, MPFR_RNDN);
        mpfr_set_d(r34246, z, MPFR_RNDN);
        ;
        mpfr_div(r34248, r34246, r34247, MPFR_RNDN);
        mpfr_sub(r34249, r34245, r34248, MPFR_RNDN);
        return mpfr_get_d(r34249, MPFR_RNDN);
}

static mpfr_t r34250, r34251, r34252, r34253, r34254, r34255, r34256, r34257, r34258;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34250);
        mpfr_init(r34251);
        mpfr_init(r34252);
        mpfr_init_set_str(r34253, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34254);
        mpfr_init(r34255);
        mpfr_init_set_str(r34256, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34257);
        mpfr_init(r34258);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34250, x, MPFR_RNDN);
        mpfr_set_d(r34251, y, MPFR_RNDN);
        mpfr_mul(r34252, r34250, r34251, MPFR_RNDN);
        ;
        mpfr_div(r34254, r34252, r34253, MPFR_RNDN);
        mpfr_set_d(r34255, z, MPFR_RNDN);
        ;
        mpfr_div(r34257, r34255, r34256, MPFR_RNDN);
        mpfr_sub(r34258, r34254, r34257, MPFR_RNDN);
        return mpfr_get_d(r34258, MPFR_RNDN);
}

