#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 r34080 = x;
        float r34081 = y;
        float r34082 = r34080 * r34081;
        float r34083 = 2.0;
        float r34084 = r34082 / r34083;
        float r34085 = z;
        float r34086 = 8.0;
        float r34087 = r34085 / r34086;
        float r34088 = r34084 - r34087;
        return r34088;
}

double f_id(double x, double y, double z) {
        double r34089 = x;
        double r34090 = y;
        double r34091 = r34089 * r34090;
        double r34092 = 2.0;
        double r34093 = r34091 / r34092;
        double r34094 = z;
        double r34095 = 8.0;
        double r34096 = r34094 / r34095;
        double r34097 = r34093 - r34096;
        return r34097;
}


double f_of(float x, float y, float z) {
        float r34098 = x;
        float r34099 = y;
        float r34100 = r34098 * r34099;
        float r34101 = 2.0;
        float r34102 = r34100 / r34101;
        float r34103 = z;
        float r34104 = 8.0;
        float r34105 = r34103 / r34104;
        float r34106 = r34102 - r34105;
        return r34106;
}

double f_od(double x, double y, double z) {
        double r34107 = x;
        double r34108 = y;
        double r34109 = r34107 * r34108;
        double r34110 = 2.0;
        double r34111 = r34109 / r34110;
        double r34112 = z;
        double r34113 = 8.0;
        double r34114 = r34112 / r34113;
        double r34115 = r34111 - r34114;
        return r34115;
}

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 r34116, r34117, r34118, r34119, r34120, r34121, r34122, r34123, r34124;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34116);
        mpfr_init(r34117);
        mpfr_init(r34118);
        mpfr_init_set_str(r34119, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34120);
        mpfr_init(r34121);
        mpfr_init_set_str(r34122, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34123);
        mpfr_init(r34124);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34116, x, MPFR_RNDN);
        mpfr_set_d(r34117, y, MPFR_RNDN);
        mpfr_mul(r34118, r34116, r34117, MPFR_RNDN);
        ;
        mpfr_div(r34120, r34118, r34119, MPFR_RNDN);
        mpfr_set_d(r34121, z, MPFR_RNDN);
        ;
        mpfr_div(r34123, r34121, r34122, MPFR_RNDN);
        mpfr_sub(r34124, r34120, r34123, MPFR_RNDN);
        return mpfr_get_d(r34124, MPFR_RNDN);
}

static mpfr_t r34125, r34126, r34127, r34128, r34129, r34130, r34131, r34132, r34133;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34125);
        mpfr_init(r34126);
        mpfr_init(r34127);
        mpfr_init_set_str(r34128, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34129);
        mpfr_init(r34130);
        mpfr_init_set_str(r34131, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34132);
        mpfr_init(r34133);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34125, x, MPFR_RNDN);
        mpfr_set_d(r34126, y, MPFR_RNDN);
        mpfr_mul(r34127, r34125, r34126, MPFR_RNDN);
        ;
        mpfr_div(r34129, r34127, r34128, MPFR_RNDN);
        mpfr_set_d(r34130, z, MPFR_RNDN);
        ;
        mpfr_div(r34132, r34130, r34131, MPFR_RNDN);
        mpfr_sub(r34133, r34129, r34132, MPFR_RNDN);
        return mpfr_get_d(r34133, MPFR_RNDN);
}

static mpfr_t r34134, r34135, r34136, r34137, r34138, r34139, r34140, r34141, r34142;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34134);
        mpfr_init(r34135);
        mpfr_init(r34136);
        mpfr_init_set_str(r34137, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34138);
        mpfr_init(r34139);
        mpfr_init_set_str(r34140, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34141);
        mpfr_init(r34142);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34134, x, MPFR_RNDN);
        mpfr_set_d(r34135, y, MPFR_RNDN);
        mpfr_mul(r34136, r34134, r34135, MPFR_RNDN);
        ;
        mpfr_div(r34138, r34136, r34137, MPFR_RNDN);
        mpfr_set_d(r34139, z, MPFR_RNDN);
        ;
        mpfr_div(r34141, r34139, r34140, MPFR_RNDN);
        mpfr_sub(r34142, r34138, r34141, MPFR_RNDN);
        return mpfr_get_d(r34142, MPFR_RNDN);
}

