#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 r8161 = b;
        float r8162 = -r8161;
        float r8163 = r8161 * r8161;
        float r8164 = 4;
        float r8165 = a;
        float r8166 = r8164 * r8165;
        float r8167 = c;
        float r8168 = r8166 * r8167;
        float r8169 = r8163 - r8168;
        float r8170 = sqrt(r8169);
        float r8171 = r8162 + r8170;
        float r8172 = 2;
        float r8173 = r8172 * r8165;
        float r8174 = r8171 / r8173;
        return r8174;
}

double f_id(double a, double b, double c) {
        double r8175 = b;
        double r8176 = -r8175;
        double r8177 = r8175 * r8175;
        double r8178 = 4;
        double r8179 = a;
        double r8180 = r8178 * r8179;
        double r8181 = c;
        double r8182 = r8180 * r8181;
        double r8183 = r8177 - r8182;
        double r8184 = sqrt(r8183);
        double r8185 = r8176 + r8184;
        double r8186 = 2;
        double r8187 = r8186 * r8179;
        double r8188 = r8185 / r8187;
        return r8188;
}


double f_of(float a, float b, float c) {
        float r8189 = 4;
        float r8190 = 2;
        float r8191 = r8189 / r8190;
        float r8192 = c;
        float r8193 = b;
        float r8194 = -r8193;
        float r8195 = r8193 * r8193;
        float r8196 = r8192 * r8189;
        float r8197 = a;
        float r8198 = r8196 * r8197;
        float r8199 = r8195 - r8198;
        float r8200 = sqrt(r8199);
        float r8201 = r8194 - r8200;
        float r8202 = r8192 / r8201;
        float r8203 = r8191 * r8202;
        return r8203;
}

double f_od(double a, double b, double c) {
        double r8204 = 4;
        double r8205 = 2;
        double r8206 = r8204 / r8205;
        double r8207 = c;
        double r8208 = b;
        double r8209 = -r8208;
        double r8210 = r8208 * r8208;
        double r8211 = r8207 * r8204;
        double r8212 = a;
        double r8213 = r8211 * r8212;
        double r8214 = r8210 - r8213;
        double r8215 = sqrt(r8214);
        double r8216 = r8209 - r8215;
        double r8217 = r8207 / r8216;
        double r8218 = r8206 * r8217;
        return r8218;
}

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 r8219, r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230, r8231, r8232;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r8219);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init_set_str(r8222, "4", 10, MPFR_RNDN);
        mpfr_init(r8223);
        mpfr_init(r8224);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
        mpfr_init(r8228);
        mpfr_init(r8229);
        mpfr_init_set_str(r8230, "2", 10, MPFR_RNDN);
        mpfr_init(r8231);
        mpfr_init(r8232);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8219, b, MPFR_RNDN);
        mpfr_neg(r8220, r8219, MPFR_RNDN);
        mpfr_mul(r8221, r8219, r8219, MPFR_RNDN);
        ;
        mpfr_set_d(r8223, a, MPFR_RNDN);
        mpfr_mul(r8224, r8222, r8223, MPFR_RNDN);
        mpfr_set_d(r8225, c, MPFR_RNDN);
        mpfr_mul(r8226, r8224, r8225, MPFR_RNDN);
        mpfr_sub(r8227, r8221, r8226, MPFR_RNDN);
        mpfr_sqrt(r8228, r8227, MPFR_RNDN);
        mpfr_add(r8229, r8220, r8228, MPFR_RNDN);
        ;
        mpfr_mul(r8231, r8230, r8223, MPFR_RNDN);
        mpfr_div(r8232, r8229, r8231, MPFR_RNDN);
        return mpfr_get_d(r8232, MPFR_RNDN);
}

static mpfr_t r8233, r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241, r8242, r8243, r8244, r8245, r8246, r8247;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8233, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8234, "2", 10, MPFR_RNDN);
        mpfr_init(r8235);
        mpfr_init(r8236);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init(r8241);
        mpfr_init(r8242);
        mpfr_init(r8243);
        mpfr_init(r8244);
        mpfr_init(r8245);
        mpfr_init(r8246);
        mpfr_init(r8247);
}

double f_fm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8235, r8233, r8234, MPFR_RNDN);
        mpfr_set_d(r8236, c, MPFR_RNDN);
        mpfr_set_d(r8237, b, MPFR_RNDN);
        mpfr_neg(r8238, r8237, MPFR_RNDN);
        mpfr_mul(r8239, r8237, r8237, MPFR_RNDN);
        mpfr_mul(r8240, r8236, r8233, MPFR_RNDN);
        mpfr_set_d(r8241, a, MPFR_RNDN);
        mpfr_mul(r8242, r8240, r8241, MPFR_RNDN);
        mpfr_sub(r8243, r8239, r8242, MPFR_RNDN);
        mpfr_sqrt(r8244, r8243, MPFR_RNDN);
        mpfr_sub(r8245, r8238, r8244, MPFR_RNDN);
        mpfr_div(r8246, r8236, r8245, MPFR_RNDN);
        mpfr_mul(r8247, r8235, r8246, MPFR_RNDN);
        return mpfr_get_d(r8247, MPFR_RNDN);
}

static mpfr_t r8248, r8249, r8250, r8251, r8252, r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8248, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8249, "2", 10, MPFR_RNDN);
        mpfr_init(r8250);
        mpfr_init(r8251);
        mpfr_init(r8252);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init(r8256);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8250, r8248, r8249, MPFR_RNDN);
        mpfr_set_d(r8251, c, MPFR_RNDN);
        mpfr_set_d(r8252, b, MPFR_RNDN);
        mpfr_neg(r8253, r8252, MPFR_RNDN);
        mpfr_mul(r8254, r8252, r8252, MPFR_RNDN);
        mpfr_mul(r8255, r8251, r8248, MPFR_RNDN);
        mpfr_set_d(r8256, a, MPFR_RNDN);
        mpfr_mul(r8257, r8255, r8256, MPFR_RNDN);
        mpfr_sub(r8258, r8254, r8257, MPFR_RNDN);
        mpfr_sqrt(r8259, r8258, MPFR_RNDN);
        mpfr_sub(r8260, r8253, r8259, MPFR_RNDN);
        mpfr_div(r8261, r8251, r8260, MPFR_RNDN);
        mpfr_mul(r8262, r8250, r8261, MPFR_RNDN);
        return mpfr_get_d(r8262, MPFR_RNDN);
}

