#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 r34464 = x;
        float r34465 = y;
        float r34466 = r34464 * r34465;
        float r34467 = 2.0;
        float r34468 = r34466 / r34467;
        float r34469 = z;
        float r34470 = 8.0;
        float r34471 = r34469 / r34470;
        float r34472 = r34468 - r34471;
        return r34472;
}

double f_id(double x, double y, double z) {
        double r34473 = x;
        double r34474 = y;
        double r34475 = r34473 * r34474;
        double r34476 = 2.0;
        double r34477 = r34475 / r34476;
        double r34478 = z;
        double r34479 = 8.0;
        double r34480 = r34478 / r34479;
        double r34481 = r34477 - r34480;
        return r34481;
}


double f_of(float x, float y, float z) {
        float r34482 = x;
        float r34483 = y;
        float r34484 = r34482 * r34483;
        float r34485 = 2.0;
        float r34486 = r34484 / r34485;
        float r34487 = z;
        float r34488 = 8.0;
        float r34489 = r34487 / r34488;
        float r34490 = r34486 - r34489;
        return r34490;
}

double f_od(double x, double y, double z) {
        double r34491 = x;
        double r34492 = y;
        double r34493 = r34491 * r34492;
        double r34494 = 2.0;
        double r34495 = r34493 / r34494;
        double r34496 = z;
        double r34497 = 8.0;
        double r34498 = r34496 / r34497;
        double r34499 = r34495 - r34498;
        return r34499;
}

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 r34500, r34501, r34502, r34503, r34504, r34505, r34506, r34507, r34508;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34500);
        mpfr_init(r34501);
        mpfr_init(r34502);
        mpfr_init_set_str(r34503, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34504);
        mpfr_init(r34505);
        mpfr_init_set_str(r34506, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34507);
        mpfr_init(r34508);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34500, x, MPFR_RNDN);
        mpfr_set_d(r34501, y, MPFR_RNDN);
        mpfr_mul(r34502, r34500, r34501, MPFR_RNDN);
        ;
        mpfr_div(r34504, r34502, r34503, MPFR_RNDN);
        mpfr_set_d(r34505, z, MPFR_RNDN);
        ;
        mpfr_div(r34507, r34505, r34506, MPFR_RNDN);
        mpfr_sub(r34508, r34504, r34507, MPFR_RNDN);
        return mpfr_get_d(r34508, MPFR_RNDN);
}

static mpfr_t r34509, r34510, r34511, r34512, r34513, r34514, r34515, r34516, r34517;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34509);
        mpfr_init(r34510);
        mpfr_init(r34511);
        mpfr_init_set_str(r34512, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34513);
        mpfr_init(r34514);
        mpfr_init_set_str(r34515, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34516);
        mpfr_init(r34517);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34509, x, MPFR_RNDN);
        mpfr_set_d(r34510, y, MPFR_RNDN);
        mpfr_mul(r34511, r34509, r34510, MPFR_RNDN);
        ;
        mpfr_div(r34513, r34511, r34512, MPFR_RNDN);
        mpfr_set_d(r34514, z, MPFR_RNDN);
        ;
        mpfr_div(r34516, r34514, r34515, MPFR_RNDN);
        mpfr_sub(r34517, r34513, r34516, MPFR_RNDN);
        return mpfr_get_d(r34517, MPFR_RNDN);
}

static mpfr_t r34518, r34519, r34520, r34521, r34522, r34523, r34524, r34525, r34526;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34518);
        mpfr_init(r34519);
        mpfr_init(r34520);
        mpfr_init_set_str(r34521, "2.0", 10, MPFR_RNDN);
        mpfr_init(r34522);
        mpfr_init(r34523);
        mpfr_init_set_str(r34524, "8.0", 10, MPFR_RNDN);
        mpfr_init(r34525);
        mpfr_init(r34526);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34518, x, MPFR_RNDN);
        mpfr_set_d(r34519, y, MPFR_RNDN);
        mpfr_mul(r34520, r34518, r34519, MPFR_RNDN);
        ;
        mpfr_div(r34522, r34520, r34521, MPFR_RNDN);
        mpfr_set_d(r34523, z, MPFR_RNDN);
        ;
        mpfr_div(r34525, r34523, r34524, MPFR_RNDN);
        mpfr_sub(r34526, r34522, r34525, MPFR_RNDN);
        return mpfr_get_d(r34526, MPFR_RNDN);
}

