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

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

double f_if(float a, float b, float c) {
        float r8169 = b;
        float r8170 = -r8169;
        float r8171 = r8169 * r8169;
        float r8172 = 4;
        float r8173 = a;
        float r8174 = r8172 * r8173;
        float r8175 = c;
        float r8176 = r8174 * r8175;
        float r8177 = r8171 - r8176;
        float r8178 = sqrt(r8177);
        float r8179 = r8170 + r8178;
        float r8180 = 2;
        float r8181 = r8180 * r8173;
        float r8182 = r8179 / r8181;
        return r8182;
}

double f_id(double a, double b, double c) {
        double r8183 = b;
        double r8184 = -r8183;
        double r8185 = r8183 * r8183;
        double r8186 = 4;
        double r8187 = a;
        double r8188 = r8186 * r8187;
        double r8189 = c;
        double r8190 = r8188 * r8189;
        double r8191 = r8185 - r8190;
        double r8192 = sqrt(r8191);
        double r8193 = r8184 + r8192;
        double r8194 = 2;
        double r8195 = r8194 * r8187;
        double r8196 = r8193 / r8195;
        return r8196;
}


double f_of(float a, float b, float c) {
        float r8197 = 1;
        float r8198 = b;
        float r8199 = -r8198;
        float r8200 = r8198 * r8198;
        float r8201 = 4;
        float r8202 = a;
        float r8203 = r8201 * r8202;
        float r8204 = c;
        float r8205 = r8203 * r8204;
        float r8206 = r8200 - r8205;
        float r8207 = sqrt(r8206);
        float r8208 = r8199 - r8207;
        float r8209 = r8204 * r8202;
        float r8210 = r8201 * r8209;
        float r8211 = r8208 / r8210;
        float r8212 = r8197 / r8211;
        float r8213 = 2;
        float r8214 = r8213 * r8202;
        float r8215 = r8197 / r8214;
        float r8216 = r8212 * r8215;
        return r8216;
}

double f_od(double a, double b, double c) {
        double r8217 = 1;
        double r8218 = b;
        double r8219 = -r8218;
        double r8220 = r8218 * r8218;
        double r8221 = 4;
        double r8222 = a;
        double r8223 = r8221 * r8222;
        double r8224 = c;
        double r8225 = r8223 * r8224;
        double r8226 = r8220 - r8225;
        double r8227 = sqrt(r8226);
        double r8228 = r8219 - r8227;
        double r8229 = r8224 * r8222;
        double r8230 = r8221 * r8229;
        double r8231 = r8228 / r8230;
        double r8232 = r8217 / r8231;
        double r8233 = 2;
        double r8234 = r8233 * r8222;
        double r8235 = r8217 / r8234;
        double r8236 = r8232 * r8235;
        return r8236;
}

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 r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244, r8245, r8246, r8247, r8248, r8249, r8250;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init_set_str(r8240, "4", 10, MPFR_RNDN);
        mpfr_init(r8241);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
        mpfr_init(r8245);
        mpfr_init(r8246);
        mpfr_init(r8247);
        mpfr_init_set_str(r8248, "2", 10, MPFR_RNDN);
        mpfr_init(r8249);
        mpfr_init(r8250);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8237, b, MPFR_RNDN);
        mpfr_neg(r8238, r8237, MPFR_RNDN);
        mpfr_mul(r8239, r8237, r8237, MPFR_RNDN);
        ;
        mpfr_set_d(r8241, a, MPFR_RNDN);
        mpfr_mul(r8242, r8240, r8241, MPFR_RNDN);
        mpfr_set_d(r8243, c, MPFR_RNDN);
        mpfr_mul(r8244, r8242, r8243, MPFR_RNDN);
        mpfr_sub(r8245, r8239, r8244, MPFR_RNDN);
        mpfr_sqrt(r8246, r8245, MPFR_RNDN);
        mpfr_add(r8247, r8238, r8246, MPFR_RNDN);
        ;
        mpfr_mul(r8249, r8248, r8241, MPFR_RNDN);
        mpfr_div(r8250, r8247, r8249, MPFR_RNDN);
        return mpfr_get_d(r8250, MPFR_RNDN);
}

static mpfr_t r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262, r8263, r8264, r8265, r8266, r8267, r8268, r8269, r8270;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8251, "1", 10, MPFR_RNDN);
        mpfr_init(r8252);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init_set_str(r8255, "4", 10, MPFR_RNDN);
        mpfr_init(r8256);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init(r8264);
        mpfr_init(r8265);
        mpfr_init(r8266);
        mpfr_init_set_str(r8267, "2", 10, MPFR_RNDN);
        mpfr_init(r8268);
        mpfr_init(r8269);
        mpfr_init(r8270);
}

double f_fm(double a, double b, double c) {
        ;
        mpfr_set_d(r8252, b, MPFR_RNDN);
        mpfr_neg(r8253, r8252, MPFR_RNDN);
        mpfr_mul(r8254, r8252, r8252, MPFR_RNDN);
        ;
        mpfr_set_d(r8256, a, MPFR_RNDN);
        mpfr_mul(r8257, r8255, r8256, MPFR_RNDN);
        mpfr_set_d(r8258, c, MPFR_RNDN);
        mpfr_mul(r8259, r8257, r8258, MPFR_RNDN);
        mpfr_sub(r8260, r8254, r8259, MPFR_RNDN);
        mpfr_sqrt(r8261, r8260, MPFR_RNDN);
        mpfr_sub(r8262, r8253, r8261, MPFR_RNDN);
        mpfr_mul(r8263, r8258, r8256, MPFR_RNDN);
        mpfr_mul(r8264, r8255, r8263, MPFR_RNDN);
        mpfr_div(r8265, r8262, r8264, MPFR_RNDN);
        mpfr_div(r8266, r8251, r8265, MPFR_RNDN);
        ;
        mpfr_mul(r8268, r8267, r8256, MPFR_RNDN);
        mpfr_div(r8269, r8251, r8268, MPFR_RNDN);
        mpfr_mul(r8270, r8266, r8269, MPFR_RNDN);
        return mpfr_get_d(r8270, MPFR_RNDN);
}

static mpfr_t r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279, r8280, r8281, r8282, r8283, r8284, r8285, r8286, r8287, r8288, r8289, r8290;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8271, "1", 10, MPFR_RNDN);
        mpfr_init(r8272);
        mpfr_init(r8273);
        mpfr_init(r8274);
        mpfr_init_set_str(r8275, "4", 10, MPFR_RNDN);
        mpfr_init(r8276);
        mpfr_init(r8277);
        mpfr_init(r8278);
        mpfr_init(r8279);
        mpfr_init(r8280);
        mpfr_init(r8281);
        mpfr_init(r8282);
        mpfr_init(r8283);
        mpfr_init(r8284);
        mpfr_init(r8285);
        mpfr_init(r8286);
        mpfr_init_set_str(r8287, "2", 10, MPFR_RNDN);
        mpfr_init(r8288);
        mpfr_init(r8289);
        mpfr_init(r8290);
}

double f_dm(double a, double b, double c) {
        ;
        mpfr_set_d(r8272, b, MPFR_RNDN);
        mpfr_neg(r8273, r8272, MPFR_RNDN);
        mpfr_mul(r8274, r8272, r8272, MPFR_RNDN);
        ;
        mpfr_set_d(r8276, a, MPFR_RNDN);
        mpfr_mul(r8277, r8275, r8276, MPFR_RNDN);
        mpfr_set_d(r8278, c, MPFR_RNDN);
        mpfr_mul(r8279, r8277, r8278, MPFR_RNDN);
        mpfr_sub(r8280, r8274, r8279, MPFR_RNDN);
        mpfr_sqrt(r8281, r8280, MPFR_RNDN);
        mpfr_sub(r8282, r8273, r8281, MPFR_RNDN);
        mpfr_mul(r8283, r8278, r8276, MPFR_RNDN);
        mpfr_mul(r8284, r8275, r8283, MPFR_RNDN);
        mpfr_div(r8285, r8282, r8284, MPFR_RNDN);
        mpfr_div(r8286, r8271, r8285, MPFR_RNDN);
        ;
        mpfr_mul(r8288, r8287, r8276, MPFR_RNDN);
        mpfr_div(r8289, r8271, r8288, MPFR_RNDN);
        mpfr_mul(r8290, r8286, r8289, MPFR_RNDN);
        return mpfr_get_d(r8290, MPFR_RNDN);
}

