#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 r34996 = x;
        float r34997 = y;
        float r34998 = 4.0;
        float r34999 = r34997 * r34998;
        float r35000 = z;
        float r35001 = r34999 * r35000;
        float r35002 = r34996 - r35001;
        return r35002;
}

double f_id(double x, double y, double z) {
        double r35003 = x;
        double r35004 = y;
        double r35005 = 4.0;
        double r35006 = r35004 * r35005;
        double r35007 = z;
        double r35008 = r35006 * r35007;
        double r35009 = r35003 - r35008;
        return r35009;
}


double f_of(float x, float y, float z) {
        float r35010 = x;
        float r35011 = y;
        float r35012 = 4.0;
        float r35013 = r35011 * r35012;
        float r35014 = z;
        float r35015 = r35013 * r35014;
        float r35016 = r35010 - r35015;
        return r35016;
}

double f_od(double x, double y, double z) {
        double r35017 = x;
        double r35018 = y;
        double r35019 = 4.0;
        double r35020 = r35018 * r35019;
        double r35021 = z;
        double r35022 = r35020 * r35021;
        double r35023 = r35017 - r35022;
        return r35023;
}

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 r35024, r35025, r35026, r35027, r35028, r35029, r35030;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r35024);
        mpfr_init(r35025);
        mpfr_init_set_str(r35026, "4.0", 10, MPFR_RNDN);
        mpfr_init(r35027);
        mpfr_init(r35028);
        mpfr_init(r35029);
        mpfr_init(r35030);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r35024, x, MPFR_RNDN);
        mpfr_set_d(r35025, y, MPFR_RNDN);
        ;
        mpfr_mul(r35027, r35025, r35026, MPFR_RNDN);
        mpfr_set_d(r35028, z, MPFR_RNDN);
        mpfr_mul(r35029, r35027, r35028, MPFR_RNDN);
        mpfr_sub(r35030, r35024, r35029, MPFR_RNDN);
        return mpfr_get_d(r35030, MPFR_RNDN);
}

static mpfr_t r35031, r35032, r35033, r35034, r35035, r35036, r35037;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35031);
        mpfr_init(r35032);
        mpfr_init_set_str(r35033, "4.0", 10, MPFR_RNDN);
        mpfr_init(r35034);
        mpfr_init(r35035);
        mpfr_init(r35036);
        mpfr_init(r35037);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r35031, x, MPFR_RNDN);
        mpfr_set_d(r35032, y, MPFR_RNDN);
        ;
        mpfr_mul(r35034, r35032, r35033, MPFR_RNDN);
        mpfr_set_d(r35035, z, MPFR_RNDN);
        mpfr_mul(r35036, r35034, r35035, MPFR_RNDN);
        mpfr_sub(r35037, r35031, r35036, MPFR_RNDN);
        return mpfr_get_d(r35037, MPFR_RNDN);
}

static mpfr_t r35038, r35039, r35040, r35041, r35042, r35043, r35044;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r35038);
        mpfr_init(r35039);
        mpfr_init_set_str(r35040, "4.0", 10, MPFR_RNDN);
        mpfr_init(r35041);
        mpfr_init(r35042);
        mpfr_init(r35043);
        mpfr_init(r35044);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r35038, x, MPFR_RNDN);
        mpfr_set_d(r35039, y, MPFR_RNDN);
        ;
        mpfr_mul(r35041, r35039, r35040, MPFR_RNDN);
        mpfr_set_d(r35042, z, MPFR_RNDN);
        mpfr_mul(r35043, r35041, r35042, MPFR_RNDN);
        mpfr_sub(r35044, r35038, r35043, MPFR_RNDN);
        return mpfr_get_d(r35044, MPFR_RNDN);
}

