#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 r34527 = x;
        float r34528 = y;
        float r34529 = 4.0;
        float r34530 = r34528 * r34529;
        float r34531 = z;
        float r34532 = r34530 * r34531;
        float r34533 = r34527 - r34532;
        return r34533;
}

double f_id(double x, double y, double z) {
        double r34534 = x;
        double r34535 = y;
        double r34536 = 4.0;
        double r34537 = r34535 * r34536;
        double r34538 = z;
        double r34539 = r34537 * r34538;
        double r34540 = r34534 - r34539;
        return r34540;
}


double f_of(float x, float y, float z) {
        float r34541 = x;
        float r34542 = y;
        float r34543 = 4.0;
        float r34544 = r34542 * r34543;
        float r34545 = z;
        float r34546 = r34544 * r34545;
        float r34547 = r34541 - r34546;
        return r34547;
}

double f_od(double x, double y, double z) {
        double r34548 = x;
        double r34549 = y;
        double r34550 = 4.0;
        double r34551 = r34549 * r34550;
        double r34552 = z;
        double r34553 = r34551 * r34552;
        double r34554 = r34548 - r34553;
        return r34554;
}

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 r34555, r34556, r34557, r34558, r34559, r34560, r34561;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r34555);
        mpfr_init(r34556);
        mpfr_init_set_str(r34557, "4.0", 10, MPFR_RNDN);
        mpfr_init(r34558);
        mpfr_init(r34559);
        mpfr_init(r34560);
        mpfr_init(r34561);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r34555, x, MPFR_RNDN);
        mpfr_set_d(r34556, y, MPFR_RNDN);
        ;
        mpfr_mul(r34558, r34556, r34557, MPFR_RNDN);
        mpfr_set_d(r34559, z, MPFR_RNDN);
        mpfr_mul(r34560, r34558, r34559, MPFR_RNDN);
        mpfr_sub(r34561, r34555, r34560, MPFR_RNDN);
        return mpfr_get_d(r34561, MPFR_RNDN);
}

static mpfr_t r34562, r34563, r34564, r34565, r34566, r34567, r34568;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34562);
        mpfr_init(r34563);
        mpfr_init_set_str(r34564, "4.0", 10, MPFR_RNDN);
        mpfr_init(r34565);
        mpfr_init(r34566);
        mpfr_init(r34567);
        mpfr_init(r34568);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r34562, x, MPFR_RNDN);
        mpfr_set_d(r34563, y, MPFR_RNDN);
        ;
        mpfr_mul(r34565, r34563, r34564, MPFR_RNDN);
        mpfr_set_d(r34566, z, MPFR_RNDN);
        mpfr_mul(r34567, r34565, r34566, MPFR_RNDN);
        mpfr_sub(r34568, r34562, r34567, MPFR_RNDN);
        return mpfr_get_d(r34568, MPFR_RNDN);
}

static mpfr_t r34569, r34570, r34571, r34572, r34573, r34574, r34575;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r34569);
        mpfr_init(r34570);
        mpfr_init_set_str(r34571, "4.0", 10, MPFR_RNDN);
        mpfr_init(r34572);
        mpfr_init(r34573);
        mpfr_init(r34574);
        mpfr_init(r34575);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r34569, x, MPFR_RNDN);
        mpfr_set_d(r34570, y, MPFR_RNDN);
        ;
        mpfr_mul(r34572, r34570, r34571, MPFR_RNDN);
        mpfr_set_d(r34573, z, MPFR_RNDN);
        mpfr_mul(r34574, r34572, r34573, MPFR_RNDN);
        mpfr_sub(r34575, r34569, r34574, MPFR_RNDN);
        return mpfr_get_d(r34575, MPFR_RNDN);
}

