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

char *name = "Quadratic roots, narrow range";

double f_if(float a, float b, float c) {
        float r8208 = b;
        float r8209 = -r8208;
        float r8210 = r8208 * r8208;
        float r8211 = 4;
        float r8212 = a;
        float r8213 = r8211 * r8212;
        float r8214 = c;
        float r8215 = r8213 * r8214;
        float r8216 = r8210 - r8215;
        float r8217 = sqrt(r8216);
        float r8218 = r8209 + r8217;
        float r8219 = 2;
        float r8220 = r8219 * r8212;
        float r8221 = r8218 / r8220;
        return r8221;
}

double f_id(double a, double b, double c) {
        double r8222 = b;
        double r8223 = -r8222;
        double r8224 = r8222 * r8222;
        double r8225 = 4;
        double r8226 = a;
        double r8227 = r8225 * r8226;
        double r8228 = c;
        double r8229 = r8227 * r8228;
        double r8230 = r8224 - r8229;
        double r8231 = sqrt(r8230);
        double r8232 = r8223 + r8231;
        double r8233 = 2;
        double r8234 = r8233 * r8226;
        double r8235 = r8232 / r8234;
        return r8235;
}


double f_of(float a, float b, float c) {
        float r8236 = c;
        float r8237 = -r8236;
        float r8238 = 4;
        float r8239 = a;
        float r8240 = r8238 * r8239;
        float r8241 = b;
        float r8242 = r8241 * r8241;
        float r8243 = fma(r8240, r8237, r8242);
        float r8244 = sqrt(r8243);
        float r8245 = r8244 + r8241;
        float r8246 = r8240 / r8245;
        float r8247 = r8237 * r8246;
        float r8248 = 2;
        float r8249 = r8248 * r8239;
        float r8250 = r8247 / r8249;
        return r8250;
}

double f_od(double a, double b, double c) {
        double r8251 = c;
        double r8252 = -r8251;
        double r8253 = 4;
        double r8254 = a;
        double r8255 = r8253 * r8254;
        double r8256 = b;
        double r8257 = r8256 * r8256;
        double r8258 = fma(r8255, r8252, r8257);
        double r8259 = sqrt(r8258);
        double r8260 = r8259 + r8256;
        double r8261 = r8255 / r8260;
        double r8262 = r8252 * r8261;
        double r8263 = 2;
        double r8264 = r8263 * r8254;
        double r8265 = r8262 / r8264;
        return r8265;
}

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 r8266, r8267, r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8266);
        mpfr_init(r8267);
        mpfr_init(r8268);
        mpfr_init_set_str(r8269, "4", 10, MPFR_RNDN);
        mpfr_init(r8270);
        mpfr_init(r8271);
        mpfr_init(r8272);
        mpfr_init(r8273);
        mpfr_init(r8274);
        mpfr_init(r8275);
        mpfr_init(r8276);
        mpfr_init_set_str(r8277, "2", 10, MPFR_RNDN);
        mpfr_init(r8278);
        mpfr_init(r8279);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8266, b, MPFR_RNDN);
        mpfr_neg(r8267, r8266, MPFR_RNDN);
        mpfr_mul(r8268, r8266, r8266, MPFR_RNDN);
        ;
        mpfr_set_d(r8270, a, MPFR_RNDN);
        mpfr_mul(r8271, r8269, r8270, MPFR_RNDN);
        mpfr_set_d(r8272, c, MPFR_RNDN);
        mpfr_mul(r8273, r8271, r8272, MPFR_RNDN);
        mpfr_sub(r8274, r8268, r8273, MPFR_RNDN);
        mpfr_sqrt(r8275, r8274, MPFR_RNDN);
        mpfr_add(r8276, r8267, r8275, MPFR_RNDN);
        ;
        mpfr_mul(r8278, r8277, r8270, MPFR_RNDN);
        mpfr_div(r8279, r8276, r8278, MPFR_RNDN);
        return mpfr_get_d(r8279, MPFR_RNDN);
}

static mpfr_t r8280, r8281, r8282, r8283, r8284, r8285, r8286, r8287, r8288, r8289, r8290, r8291, r8292, r8293, r8294;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8280);
        mpfr_init(r8281);
        mpfr_init_set_str(r8282, "4", 10, MPFR_RNDN);
        mpfr_init(r8283);
        mpfr_init(r8284);
        mpfr_init(r8285);
        mpfr_init(r8286);
        mpfr_init(r8287);
        mpfr_init(r8288);
        mpfr_init(r8289);
        mpfr_init(r8290);
        mpfr_init(r8291);
        mpfr_init_set_str(r8292, "2", 10, MPFR_RNDN);
        mpfr_init(r8293);
        mpfr_init(r8294);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r8280, c, MPFR_RNDN);
        mpfr_neg(r8281, r8280, MPFR_RNDN);
        ;
        mpfr_set_d(r8283, a, MPFR_RNDN);
        mpfr_mul(r8284, r8282, r8283, MPFR_RNDN);
        mpfr_set_d(r8285, b, MPFR_RNDN);
        mpfr_mul(r8286, r8285, r8285, MPFR_RNDN);
        mpfr_fma(r8287, r8284, r8281, r8286, MPFR_RNDN);
        mpfr_sqrt(r8288, r8287, MPFR_RNDN);
        mpfr_add(r8289, r8288, r8285, MPFR_RNDN);
        mpfr_div(r8290, r8284, r8289, MPFR_RNDN);
        mpfr_mul(r8291, r8281, r8290, MPFR_RNDN);
        ;
        mpfr_mul(r8293, r8292, r8283, MPFR_RNDN);
        mpfr_div(r8294, r8291, r8293, MPFR_RNDN);
        return mpfr_get_d(r8294, MPFR_RNDN);
}

static mpfr_t r8295, r8296, r8297, r8298, r8299, r8300, r8301, r8302, r8303, r8304, r8305, r8306, r8307, r8308, r8309;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8295);
        mpfr_init(r8296);
        mpfr_init_set_str(r8297, "4", 10, MPFR_RNDN);
        mpfr_init(r8298);
        mpfr_init(r8299);
        mpfr_init(r8300);
        mpfr_init(r8301);
        mpfr_init(r8302);
        mpfr_init(r8303);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init_set_str(r8307, "2", 10, MPFR_RNDN);
        mpfr_init(r8308);
        mpfr_init(r8309);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r8295, c, MPFR_RNDN);
        mpfr_neg(r8296, r8295, MPFR_RNDN);
        ;
        mpfr_set_d(r8298, a, MPFR_RNDN);
        mpfr_mul(r8299, r8297, r8298, MPFR_RNDN);
        mpfr_set_d(r8300, b, MPFR_RNDN);
        mpfr_mul(r8301, r8300, r8300, MPFR_RNDN);
        mpfr_fma(r8302, r8299, r8296, r8301, MPFR_RNDN);
        mpfr_sqrt(r8303, r8302, MPFR_RNDN);
        mpfr_add(r8304, r8303, r8300, MPFR_RNDN);
        mpfr_div(r8305, r8299, r8304, MPFR_RNDN);
        mpfr_mul(r8306, r8296, r8305, MPFR_RNDN);
        ;
        mpfr_mul(r8308, r8307, r8298, MPFR_RNDN);
        mpfr_div(r8309, r8306, r8308, MPFR_RNDN);
        return mpfr_get_d(r8309, MPFR_RNDN);
}

