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

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

double f_if(float a, float b, float c) {
        float r8171 = b;
        float r8172 = -r8171;
        float r8173 = r8171 * r8171;
        float r8174 = 4.0f;
        float r8175 = a;
        float r8176 = r8174 * r8175;
        float r8177 = c;
        float r8178 = r8176 * r8177;
        float r8179 = r8173 - r8178;
        float r8180 = sqrt(r8179);
        float r8181 = r8172 + r8180;
        float r8182 = 2.0f;
        float r8183 = r8182 * r8175;
        float r8184 = r8181 / r8183;
        return r8184;
}

double f_id(double a, double b, double c) {
        double r8185 = b;
        double r8186 = -r8185;
        double r8187 = r8185 * r8185;
        double r8188 = 4.0;
        double r8189 = a;
        double r8190 = r8188 * r8189;
        double r8191 = c;
        double r8192 = r8190 * r8191;
        double r8193 = r8187 - r8192;
        double r8194 = sqrt(r8193);
        double r8195 = r8186 + r8194;
        double r8196 = 2.0;
        double r8197 = r8196 * r8189;
        double r8198 = r8195 / r8197;
        return r8198;
}


double f_of(float a, float b, float c) {
        float r8199 = b;
        float r8200 = -1.338815475246526e+154f;
        bool r8201 = r8199 <= r8200;
        float r8202 = -0.5f;
        float r8203 = a;
        float r8204 = r8199 / r8203;
        float r8205 = r8202 * r8204;
        float r8206 = 3.690239526200231e-95f;
        bool r8207 = r8199 <= r8206;
        float r8208 = 4.0f;
        float r8209 = r8203 * r8208;
        float r8210 = c;
        float r8211 = -r8210;
        float r8212 = r8199 * r8199;
        float r8213 = fma(r8209, r8211, r8212);
        float r8214 = sqrt(r8213);
        float r8215 = 2.0f;
        float r8216 = r8215 * r8203;
        float r8217 = r8214 / r8216;
        float r8218 = r8199 / r8216;
        float r8219 = r8217 - r8218;
        float r8220 = r8211 * r8209;
        float r8221 = r8214 + r8199;
        float r8222 = r8216 * r8221;
        float r8223 = r8220 / r8222;
        float r8224 = r8207 ? r8219 : r8223;
        float r8225 = r8201 ? r8205 : r8224;
        return r8225;
}

double f_od(double a, double b, double c) {
        double r8226 = b;
        double r8227 = -1.338815475246526e+154;
        bool r8228 = r8226 <= r8227;
        double r8229 = -0.5;
        double r8230 = a;
        double r8231 = r8226 / r8230;
        double r8232 = r8229 * r8231;
        double r8233 = 3.690239526200231e-95;
        bool r8234 = r8226 <= r8233;
        double r8235 = 4.0;
        double r8236 = r8230 * r8235;
        double r8237 = c;
        double r8238 = -r8237;
        double r8239 = r8226 * r8226;
        double r8240 = fma(r8236, r8238, r8239);
        double r8241 = sqrt(r8240);
        double r8242 = 2.0;
        double r8243 = r8242 * r8230;
        double r8244 = r8241 / r8243;
        double r8245 = r8226 / r8243;
        double r8246 = r8244 - r8245;
        double r8247 = r8238 * r8236;
        double r8248 = r8241 + r8226;
        double r8249 = r8243 * r8248;
        double r8250 = r8247 / r8249;
        double r8251 = r8234 ? r8246 : r8250;
        double r8252 = r8228 ? r8232 : r8251;
        return r8252;
}

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 r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262, r8263, r8264, r8265, r8266;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3152);
        mpfr_init(r8253);
        mpfr_init(r8254);
        mpfr_init(r8255);
        mpfr_init_set_str(r8256, "4", 10, MPFR_RNDN);
        mpfr_init(r8257);
        mpfr_init(r8258);
        mpfr_init(r8259);
        mpfr_init(r8260);
        mpfr_init(r8261);
        mpfr_init(r8262);
        mpfr_init(r8263);
        mpfr_init_set_str(r8264, "2", 10, MPFR_RNDN);
        mpfr_init(r8265);
        mpfr_init(r8266);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8253, b, MPFR_RNDN);
        mpfr_neg(r8254, r8253, MPFR_RNDN);
        mpfr_mul(r8255, r8253, r8253, MPFR_RNDN);
        ;
        mpfr_set_d(r8257, a, MPFR_RNDN);
        mpfr_mul(r8258, r8256, r8257, MPFR_RNDN);
        mpfr_set_d(r8259, c, MPFR_RNDN);
        mpfr_mul(r8260, r8258, r8259, MPFR_RNDN);
        mpfr_sub(r8261, r8255, r8260, MPFR_RNDN);
        mpfr_sqrt(r8262, r8261, MPFR_RNDN);
        mpfr_add(r8263, r8254, r8262, MPFR_RNDN);
        ;
        mpfr_mul(r8265, r8264, r8257, MPFR_RNDN);
        mpfr_div(r8266, r8263, r8265, MPFR_RNDN);
        return mpfr_get_d(r8266, MPFR_RNDN);
}

static mpfr_t r8267, r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279, r8280, r8281, r8282, r8283, r8284, r8285, r8286, r8287, r8288, r8289, r8290, r8291, r8292, r8293;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3152);
        mpfr_init(r8267);
        mpfr_init_set_str(r8268, "-1.338815475246526e+154", 10, MPFR_RNDN);
        mpfr_init(r8269);
        mpfr_init_set_str(r8270, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r8271);
        mpfr_init(r8272);
        mpfr_init(r8273);
        mpfr_init_set_str(r8274, "3.690239526200231e-95", 10, MPFR_RNDN);
        mpfr_init(r8275);
        mpfr_init_set_str(r8276, "4", 10, MPFR_RNDN);
        mpfr_init(r8277);
        mpfr_init(r8278);
        mpfr_init(r8279);
        mpfr_init(r8280);
        mpfr_init(r8281);
        mpfr_init(r8282);
        mpfr_init_set_str(r8283, "2", 10, MPFR_RNDN);
        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(r8292);
        mpfr_init(r8293);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r8267, b, MPFR_RNDN);
        ;
        mpfr_set_si(r8269, mpfr_cmp(r8267, r8268) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r8271, a, MPFR_RNDN);
        mpfr_div(r8272, r8267, r8271, MPFR_RNDN);
        mpfr_mul(r8273, r8270, r8272, MPFR_RNDN);
        ;
        mpfr_set_si(r8275, mpfr_cmp(r8267, r8274) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r8277, r8271, r8276, MPFR_RNDN);
        mpfr_set_d(r8278, c, MPFR_RNDN);
        mpfr_neg(r8279, r8278, MPFR_RNDN);
        mpfr_mul(r8280, r8267, r8267, MPFR_RNDN);
        mpfr_fma(r8281, r8277, r8279, r8280, MPFR_RNDN);
        mpfr_sqrt(r8282, r8281, MPFR_RNDN);
        ;
        mpfr_mul(r8284, r8283, r8271, MPFR_RNDN);
        mpfr_div(r8285, r8282, r8284, MPFR_RNDN);
        mpfr_div(r8286, r8267, r8284, MPFR_RNDN);
        mpfr_sub(r8287, r8285, r8286, MPFR_RNDN);
        mpfr_mul(r8288, r8279, r8277, MPFR_RNDN);
        mpfr_add(r8289, r8282, r8267, MPFR_RNDN);
        mpfr_mul(r8290, r8284, r8289, MPFR_RNDN);
        mpfr_div(r8291, r8288, r8290, MPFR_RNDN);
        if (mpfr_get_si(r8275, MPFR_RNDN)) { mpfr_set(r8292, r8287, MPFR_RNDN); } else { mpfr_set(r8292, r8291, MPFR_RNDN); };
        if (mpfr_get_si(r8269, MPFR_RNDN)) { mpfr_set(r8293, r8273, MPFR_RNDN); } else { mpfr_set(r8293, r8292, MPFR_RNDN); };
        return mpfr_get_d(r8293, MPFR_RNDN);
}

static mpfr_t r8294, r8295, r8296, r8297, r8298, r8299, r8300, r8301, r8302, r8303, r8304, r8305, r8306, r8307, r8308, r8309, r8310, r8311, r8312, r8313, r8314, r8315, r8316, r8317, r8318, r8319, r8320;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3152);
        mpfr_init(r8294);
        mpfr_init_set_str(r8295, "-1.338815475246526e+154", 10, MPFR_RNDN);
        mpfr_init(r8296);
        mpfr_init_set_str(r8297, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r8298);
        mpfr_init(r8299);
        mpfr_init(r8300);
        mpfr_init_set_str(r8301, "3.690239526200231e-95", 10, MPFR_RNDN);
        mpfr_init(r8302);
        mpfr_init_set_str(r8303, "4", 10, MPFR_RNDN);
        mpfr_init(r8304);
        mpfr_init(r8305);
        mpfr_init(r8306);
        mpfr_init(r8307);
        mpfr_init(r8308);
        mpfr_init(r8309);
        mpfr_init_set_str(r8310, "2", 10, MPFR_RNDN);
        mpfr_init(r8311);
        mpfr_init(r8312);
        mpfr_init(r8313);
        mpfr_init(r8314);
        mpfr_init(r8315);
        mpfr_init(r8316);
        mpfr_init(r8317);
        mpfr_init(r8318);
        mpfr_init(r8319);
        mpfr_init(r8320);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r8294, b, MPFR_RNDN);
        ;
        mpfr_set_si(r8296, mpfr_cmp(r8294, r8295) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r8298, a, MPFR_RNDN);
        mpfr_div(r8299, r8294, r8298, MPFR_RNDN);
        mpfr_mul(r8300, r8297, r8299, MPFR_RNDN);
        ;
        mpfr_set_si(r8302, mpfr_cmp(r8294, r8301) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r8304, r8298, r8303, MPFR_RNDN);
        mpfr_set_d(r8305, c, MPFR_RNDN);
        mpfr_neg(r8306, r8305, MPFR_RNDN);
        mpfr_mul(r8307, r8294, r8294, MPFR_RNDN);
        mpfr_fma(r8308, r8304, r8306, r8307, MPFR_RNDN);
        mpfr_sqrt(r8309, r8308, MPFR_RNDN);
        ;
        mpfr_mul(r8311, r8310, r8298, MPFR_RNDN);
        mpfr_div(r8312, r8309, r8311, MPFR_RNDN);
        mpfr_div(r8313, r8294, r8311, MPFR_RNDN);
        mpfr_sub(r8314, r8312, r8313, MPFR_RNDN);
        mpfr_mul(r8315, r8306, r8304, MPFR_RNDN);
        mpfr_add(r8316, r8309, r8294, MPFR_RNDN);
        mpfr_mul(r8317, r8311, r8316, MPFR_RNDN);
        mpfr_div(r8318, r8315, r8317, MPFR_RNDN);
        if (mpfr_get_si(r8302, MPFR_RNDN)) { mpfr_set(r8319, r8314, MPFR_RNDN); } else { mpfr_set(r8319, r8318, MPFR_RNDN); };
        if (mpfr_get_si(r8296, MPFR_RNDN)) { mpfr_set(r8320, r8300, MPFR_RNDN); } else { mpfr_set(r8320, r8319, MPFR_RNDN); };
        return mpfr_get_d(r8320, MPFR_RNDN);
}

