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

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

double f_if(float x, float y, float z) {
        float r34532 = x;
        float r34533 = y;
        float r34534 = 4.0;
        float r34535 = r34533 * r34534;
        float r34536 = z;
        float r34537 = r34535 * r34536;
        float r34538 = r34532 - r34537;
        return r34538;
}

double f_id(double x, double y, double z) {
        double r34539 = x;
        double r34540 = y;
        double r34541 = 4.0;
        double r34542 = r34540 * r34541;
        double r34543 = z;
        double r34544 = r34542 * r34543;
        double r34545 = r34539 - r34544;
        return r34545;
}


double f_of(float x, float y, float z) {
        float r34546 = x;
        float r34547 = y;
        float r34548 = 4.0;
        float r34549 = r34547 * r34548;
        float r34550 = z;
        float r34551 = r34549 * r34550;
        float r34552 = r34546 - r34551;
        return r34552;
}

double f_od(double x, double y, double z) {
        double r34553 = x;
        double r34554 = y;
        double r34555 = 4.0;
        double r34556 = r34554 * r34555;
        double r34557 = z;
        double r34558 = r34556 * r34557;
        double r34559 = r34553 - r34558;
        return r34559;
}

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 r34560, r34561, r34562, r34563, r34564, r34565, r34566;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34560);
        mpfr_init(r34561);
        mpfr_init_set_str(r34562, "4.0", 10, MPFR_RNDN);
        mpfr_init(r34563);
        mpfr_init(r34564);
        mpfr_init(r34565);
        mpfr_init(r34566);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34560, x, MPFR_RNDN);
        mpfr_set_d(r34561, y, MPFR_RNDN);
        ;
        mpfr_mul(r34563, r34561, r34562, MPFR_RNDN);
        mpfr_set_d(r34564, z, MPFR_RNDN);
        mpfr_mul(r34565, r34563, r34564, MPFR_RNDN);
        mpfr_sub(r34566, r34560, r34565, MPFR_RNDN);
        return mpfr_get_d(r34566, MPFR_RNDN);
}

static mpfr_t r34567, r34568, r34569, r34570, r34571, r34572, r34573;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34567);
        mpfr_init(r34568);
        mpfr_init_set_str(r34569, "4.0", 10, MPFR_RNDN);
        mpfr_init(r34570);
        mpfr_init(r34571);
        mpfr_init(r34572);
        mpfr_init(r34573);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34567, x, MPFR_RNDN);
        mpfr_set_d(r34568, y, MPFR_RNDN);
        ;
        mpfr_mul(r34570, r34568, r34569, MPFR_RNDN);
        mpfr_set_d(r34571, z, MPFR_RNDN);
        mpfr_mul(r34572, r34570, r34571, MPFR_RNDN);
        mpfr_sub(r34573, r34567, r34572, MPFR_RNDN);
        return mpfr_get_d(r34573, MPFR_RNDN);
}

static mpfr_t r34574, r34575, r34576, r34577, r34578, r34579, r34580;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34574);
        mpfr_init(r34575);
        mpfr_init_set_str(r34576, "4.0", 10, MPFR_RNDN);
        mpfr_init(r34577);
        mpfr_init(r34578);
        mpfr_init(r34579);
        mpfr_init(r34580);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34574, x, MPFR_RNDN);
        mpfr_set_d(r34575, y, MPFR_RNDN);
        ;
        mpfr_mul(r34577, r34575, r34576, MPFR_RNDN);
        mpfr_set_d(r34578, z, MPFR_RNDN);
        mpfr_mul(r34579, r34577, r34578, MPFR_RNDN);
        mpfr_sub(r34580, r34574, r34579, MPFR_RNDN);
        return mpfr_get_d(r34580, MPFR_RNDN);
}

