#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 r48375 = x;
        float r48376 = r48375 * r48375;
        float r48377 = y;
        float r48378 = 4.0f;
        float r48379 = r48377 * r48378;
        float r48380 = z;
        float r48381 = r48379 * r48380;
        float r48382 = r48376 - r48381;
        return r48382;
}

double f_id(double x, double y, double z) {
        double r48383 = x;
        double r48384 = r48383 * r48383;
        double r48385 = y;
        double r48386 = 4.0;
        double r48387 = r48385 * r48386;
        double r48388 = z;
        double r48389 = r48387 * r48388;
        double r48390 = r48384 - r48389;
        return r48390;
}


double f_of(float x, float y, float z) {
        float r48391 = x;
        float r48392 = r48391 * r48391;
        float r48393 = 4.0f;
        float r48394 = y;
        float r48395 = z;
        float r48396 = r48394 * r48395;
        float r48397 = r48393 * r48396;
        float r48398 = r48392 - r48397;
        return r48398;
}

double f_od(double x, double y, double z) {
        double r48399 = x;
        double r48400 = r48399 * r48399;
        double r48401 = 4.0;
        double r48402 = y;
        double r48403 = z;
        double r48404 = r48402 * r48403;
        double r48405 = r48401 * r48404;
        double r48406 = r48400 - r48405;
        return r48406;
}

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 r48407, r48408, r48409, r48410, r48411, r48412, r48413, r48414;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r48407);
        mpfr_init(r48408);
        mpfr_init(r48409);
        mpfr_init_set_str(r48410, "4.0", 10, MPFR_RNDN);
        mpfr_init(r48411);
        mpfr_init(r48412);
        mpfr_init(r48413);
        mpfr_init(r48414);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r48407, x, MPFR_RNDN);
        mpfr_mul(r48408, r48407, r48407, MPFR_RNDN);
        mpfr_set_d(r48409, y, MPFR_RNDN);
        ;
        mpfr_mul(r48411, r48409, r48410, MPFR_RNDN);
        mpfr_set_d(r48412, z, MPFR_RNDN);
        mpfr_mul(r48413, r48411, r48412, MPFR_RNDN);
        mpfr_sub(r48414, r48408, r48413, MPFR_RNDN);
        return mpfr_get_d(r48414, MPFR_RNDN);
}

static mpfr_t r48415, r48416, r48417, r48418, r48419, r48420, r48421, r48422;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48415);
        mpfr_init(r48416);
        mpfr_init_set_str(r48417, "4.0", 10, MPFR_RNDN);
        mpfr_init(r48418);
        mpfr_init(r48419);
        mpfr_init(r48420);
        mpfr_init(r48421);
        mpfr_init(r48422);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r48415, x, MPFR_RNDN);
        mpfr_sqr(r48416, r48415, MPFR_RNDN);
        ;
        mpfr_set_d(r48418, y, MPFR_RNDN);
        mpfr_set_d(r48419, z, MPFR_RNDN);
        mpfr_mul(r48420, r48418, r48419, MPFR_RNDN);
        mpfr_mul(r48421, r48417, r48420, MPFR_RNDN);
        mpfr_sub(r48422, r48416, r48421, MPFR_RNDN);
        return mpfr_get_d(r48422, MPFR_RNDN);
}

static mpfr_t r48423, r48424, r48425, r48426, r48427, r48428, r48429, r48430;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r48423);
        mpfr_init(r48424);
        mpfr_init_set_str(r48425, "4.0", 10, MPFR_RNDN);
        mpfr_init(r48426);
        mpfr_init(r48427);
        mpfr_init(r48428);
        mpfr_init(r48429);
        mpfr_init(r48430);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r48423, x, MPFR_RNDN);
        mpfr_sqr(r48424, r48423, MPFR_RNDN);
        ;
        mpfr_set_d(r48426, y, MPFR_RNDN);
        mpfr_set_d(r48427, z, MPFR_RNDN);
        mpfr_mul(r48428, r48426, r48427, MPFR_RNDN);
        mpfr_mul(r48429, r48425, r48428, MPFR_RNDN);
        mpfr_sub(r48430, r48424, r48429, MPFR_RNDN);
        return mpfr_get_d(r48430, MPFR_RNDN);
}

