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

char *name = "Graphics.Rasterific.QuadraticFormula:discriminant from Rasterific-0.6.1";

double f_if(float x, float y, float z) {
        float r32291 = x;
        float r32292 = r32291 * r32291;
        float r32293 = y;
        float r32294 = 4.0;
        float r32295 = r32293 * r32294;
        float r32296 = z;
        float r32297 = r32295 * r32296;
        float r32298 = r32292 - r32297;
        return r32298;
}

double f_id(double x, double y, double z) {
        double r32299 = x;
        double r32300 = r32299 * r32299;
        double r32301 = y;
        double r32302 = 4.0;
        double r32303 = r32301 * r32302;
        double r32304 = z;
        double r32305 = r32303 * r32304;
        double r32306 = r32300 - r32305;
        return r32306;
}


double f_of(float x, float y, float z) {
        float r32307 = x;
        float r32308 = r32307 * r32307;
        float r32309 = y;
        float r32310 = 4.0;
        float r32311 = r32309 * r32310;
        float r32312 = z;
        float r32313 = r32311 * r32312;
        float r32314 = r32308 - r32313;
        return r32314;
}

double f_od(double x, double y, double z) {
        double r32315 = x;
        double r32316 = r32315 * r32315;
        double r32317 = y;
        double r32318 = 4.0;
        double r32319 = r32317 * r32318;
        double r32320 = z;
        double r32321 = r32319 * r32320;
        double r32322 = r32316 - r32321;
        return r32322;
}

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 r32323, r32324, r32325, r32326, r32327, r32328, r32329, r32330;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32323);
        mpfr_init(r32324);
        mpfr_init(r32325);
        mpfr_init_set_str(r32326, "4.0", 10, MPFR_RNDN);
        mpfr_init(r32327);
        mpfr_init(r32328);
        mpfr_init(r32329);
        mpfr_init(r32330);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r32323, x, MPFR_RNDN);
        mpfr_mul(r32324, r32323, r32323, MPFR_RNDN);
        mpfr_set_d(r32325, y, MPFR_RNDN);
        ;
        mpfr_mul(r32327, r32325, r32326, MPFR_RNDN);
        mpfr_set_d(r32328, z, MPFR_RNDN);
        mpfr_mul(r32329, r32327, r32328, MPFR_RNDN);
        mpfr_sub(r32330, r32324, r32329, MPFR_RNDN);
        return mpfr_get_d(r32330, MPFR_RNDN);
}

static mpfr_t r32331, r32332, r32333, r32334, r32335, r32336, r32337, r32338;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32331);
        mpfr_init(r32332);
        mpfr_init(r32333);
        mpfr_init_set_str(r32334, "4.0", 10, MPFR_RNDN);
        mpfr_init(r32335);
        mpfr_init(r32336);
        mpfr_init(r32337);
        mpfr_init(r32338);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r32331, x, MPFR_RNDN);
        mpfr_mul(r32332, r32331, r32331, MPFR_RNDN);
        mpfr_set_d(r32333, y, MPFR_RNDN);
        ;
        mpfr_mul(r32335, r32333, r32334, MPFR_RNDN);
        mpfr_set_d(r32336, z, MPFR_RNDN);
        mpfr_mul(r32337, r32335, r32336, MPFR_RNDN);
        mpfr_sub(r32338, r32332, r32337, MPFR_RNDN);
        return mpfr_get_d(r32338, MPFR_RNDN);
}

static mpfr_t r32339, r32340, r32341, r32342, r32343, r32344, r32345, r32346;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32339);
        mpfr_init(r32340);
        mpfr_init(r32341);
        mpfr_init_set_str(r32342, "4.0", 10, MPFR_RNDN);
        mpfr_init(r32343);
        mpfr_init(r32344);
        mpfr_init(r32345);
        mpfr_init(r32346);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r32339, x, MPFR_RNDN);
        mpfr_mul(r32340, r32339, r32339, MPFR_RNDN);
        mpfr_set_d(r32341, y, MPFR_RNDN);
        ;
        mpfr_mul(r32343, r32341, r32342, MPFR_RNDN);
        mpfr_set_d(r32344, z, MPFR_RNDN);
        mpfr_mul(r32345, r32343, r32344, MPFR_RNDN);
        mpfr_sub(r32346, r32340, r32345, MPFR_RNDN);
        return mpfr_get_d(r32346, MPFR_RNDN);
}

