#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 r32520 = x;
        float r32521 = r32520 * r32520;
        float r32522 = y;
        float r32523 = 4.0;
        float r32524 = r32522 * r32523;
        float r32525 = z;
        float r32526 = r32524 * r32525;
        float r32527 = r32521 - r32526;
        return r32527;
}

double f_id(double x, double y, double z) {
        double r32528 = x;
        double r32529 = r32528 * r32528;
        double r32530 = y;
        double r32531 = 4.0;
        double r32532 = r32530 * r32531;
        double r32533 = z;
        double r32534 = r32532 * r32533;
        double r32535 = r32529 - r32534;
        return r32535;
}


double f_of(float x, float y, float z) {
        float r32536 = x;
        float r32537 = r32536 * r32536;
        float r32538 = y;
        float r32539 = 4.0;
        float r32540 = r32538 * r32539;
        float r32541 = z;
        float r32542 = r32540 * r32541;
        float r32543 = r32537 - r32542;
        return r32543;
}

double f_od(double x, double y, double z) {
        double r32544 = x;
        double r32545 = r32544 * r32544;
        double r32546 = y;
        double r32547 = 4.0;
        double r32548 = r32546 * r32547;
        double r32549 = z;
        double r32550 = r32548 * r32549;
        double r32551 = r32545 - r32550;
        return r32551;
}

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 r32552, r32553, r32554, r32555, r32556, r32557, r32558, r32559;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r32552);
        mpfr_init(r32553);
        mpfr_init(r32554);
        mpfr_init_set_str(r32555, "4.0", 10, MPFR_RNDN);
        mpfr_init(r32556);
        mpfr_init(r32557);
        mpfr_init(r32558);
        mpfr_init(r32559);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r32552, x, MPFR_RNDN);
        mpfr_mul(r32553, r32552, r32552, MPFR_RNDN);
        mpfr_set_d(r32554, y, MPFR_RNDN);
        ;
        mpfr_mul(r32556, r32554, r32555, MPFR_RNDN);
        mpfr_set_d(r32557, z, MPFR_RNDN);
        mpfr_mul(r32558, r32556, r32557, MPFR_RNDN);
        mpfr_sub(r32559, r32553, r32558, MPFR_RNDN);
        return mpfr_get_d(r32559, MPFR_RNDN);
}

static mpfr_t r32560, r32561, r32562, r32563, r32564, r32565, r32566, r32567;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32560);
        mpfr_init(r32561);
        mpfr_init(r32562);
        mpfr_init_set_str(r32563, "4.0", 10, MPFR_RNDN);
        mpfr_init(r32564);
        mpfr_init(r32565);
        mpfr_init(r32566);
        mpfr_init(r32567);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r32560, x, MPFR_RNDN);
        mpfr_mul(r32561, r32560, r32560, MPFR_RNDN);
        mpfr_set_d(r32562, y, MPFR_RNDN);
        ;
        mpfr_mul(r32564, r32562, r32563, MPFR_RNDN);
        mpfr_set_d(r32565, z, MPFR_RNDN);
        mpfr_mul(r32566, r32564, r32565, MPFR_RNDN);
        mpfr_sub(r32567, r32561, r32566, MPFR_RNDN);
        return mpfr_get_d(r32567, MPFR_RNDN);
}

static mpfr_t r32568, r32569, r32570, r32571, r32572, r32573, r32574, r32575;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r32568);
        mpfr_init(r32569);
        mpfr_init(r32570);
        mpfr_init_set_str(r32571, "4.0", 10, MPFR_RNDN);
        mpfr_init(r32572);
        mpfr_init(r32573);
        mpfr_init(r32574);
        mpfr_init(r32575);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r32568, x, MPFR_RNDN);
        mpfr_mul(r32569, r32568, r32568, MPFR_RNDN);
        mpfr_set_d(r32570, y, MPFR_RNDN);
        ;
        mpfr_mul(r32572, r32570, r32571, MPFR_RNDN);
        mpfr_set_d(r32573, z, MPFR_RNDN);
        mpfr_mul(r32574, r32572, r32573, MPFR_RNDN);
        mpfr_sub(r32575, r32569, r32574, MPFR_RNDN);
        return mpfr_get_d(r32575, MPFR_RNDN);
}

