#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 r52302 = x;
        float r52303 = y;
        float r52304 = 4.0f;
        float r52305 = r52303 * r52304;
        float r52306 = z;
        float r52307 = r52305 * r52306;
        float r52308 = r52302 - r52307;
        return r52308;
}

double f_id(double x, double y, double z) {
        double r52309 = x;
        double r52310 = y;
        double r52311 = 4.0;
        double r52312 = r52310 * r52311;
        double r52313 = z;
        double r52314 = r52312 * r52313;
        double r52315 = r52309 - r52314;
        return r52315;
}


double f_of(float x, float y, float z) {
        float r52316 = x;
        float r52317 = 4.0f;
        float r52318 = y;
        float r52319 = z;
        float r52320 = r52318 * r52319;
        float r52321 = r52317 * r52320;
        float r52322 = r52316 - r52321;
        return r52322;
}

double f_od(double x, double y, double z) {
        double r52323 = x;
        double r52324 = 4.0;
        double r52325 = y;
        double r52326 = z;
        double r52327 = r52325 * r52326;
        double r52328 = r52324 * r52327;
        double r52329 = r52323 - r52328;
        return r52329;
}

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 r52330, r52331, r52332, r52333, r52334, r52335, r52336;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r52330);
        mpfr_init(r52331);
        mpfr_init_set_str(r52332, "4.0", 10, MPFR_RNDN);
        mpfr_init(r52333);
        mpfr_init(r52334);
        mpfr_init(r52335);
        mpfr_init(r52336);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r52330, x, MPFR_RNDN);
        mpfr_set_d(r52331, y, MPFR_RNDN);
        ;
        mpfr_mul(r52333, r52331, r52332, MPFR_RNDN);
        mpfr_set_d(r52334, z, MPFR_RNDN);
        mpfr_mul(r52335, r52333, r52334, MPFR_RNDN);
        mpfr_sub(r52336, r52330, r52335, MPFR_RNDN);
        return mpfr_get_d(r52336, MPFR_RNDN);
}

static mpfr_t r52337, r52338, r52339, r52340, r52341, r52342, r52343;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r52337);
        mpfr_init_set_str(r52338, "4.0", 10, MPFR_RNDN);
        mpfr_init(r52339);
        mpfr_init(r52340);
        mpfr_init(r52341);
        mpfr_init(r52342);
        mpfr_init(r52343);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r52337, x, MPFR_RNDN);
        ;
        mpfr_set_d(r52339, y, MPFR_RNDN);
        mpfr_set_d(r52340, z, MPFR_RNDN);
        mpfr_mul(r52341, r52339, r52340, MPFR_RNDN);
        mpfr_mul(r52342, r52338, r52341, MPFR_RNDN);
        mpfr_sub(r52343, r52337, r52342, MPFR_RNDN);
        return mpfr_get_d(r52343, MPFR_RNDN);
}

static mpfr_t r52344, r52345, r52346, r52347, r52348, r52349, r52350;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r52344);
        mpfr_init_set_str(r52345, "4.0", 10, MPFR_RNDN);
        mpfr_init(r52346);
        mpfr_init(r52347);
        mpfr_init(r52348);
        mpfr_init(r52349);
        mpfr_init(r52350);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r52344, x, MPFR_RNDN);
        ;
        mpfr_set_d(r52346, y, MPFR_RNDN);
        mpfr_set_d(r52347, z, MPFR_RNDN);
        mpfr_mul(r52348, r52346, r52347, MPFR_RNDN);
        mpfr_mul(r52349, r52345, r52348, MPFR_RNDN);
        mpfr_sub(r52350, r52344, r52349, MPFR_RNDN);
        return mpfr_get_d(r52350, MPFR_RNDN);
}

