#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 r8181 = b;
        float r8182 = -r8181;
        float r8183 = r8181 * r8181;
        float r8184 = 4;
        float r8185 = a;
        float r8186 = r8184 * r8185;
        float r8187 = c;
        float r8188 = r8186 * r8187;
        float r8189 = r8183 - r8188;
        float r8190 = sqrt(r8189);
        float r8191 = r8182 + r8190;
        float r8192 = 2;
        float r8193 = r8192 * r8185;
        float r8194 = r8191 / r8193;
        return r8194;
}

double f_id(double a, double b, double c) {
        double r8195 = b;
        double r8196 = -r8195;
        double r8197 = r8195 * r8195;
        double r8198 = 4;
        double r8199 = a;
        double r8200 = r8198 * r8199;
        double r8201 = c;
        double r8202 = r8200 * r8201;
        double r8203 = r8197 - r8202;
        double r8204 = sqrt(r8203);
        double r8205 = r8196 + r8204;
        double r8206 = 2;
        double r8207 = r8206 * r8199;
        double r8208 = r8205 / r8207;
        return r8208;
}


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

double f_od(double a, double b, double c) {
        double r8224 = 4;
        double r8225 = 2;
        double r8226 = r8224 / r8225;
        double r8227 = c;
        double r8228 = b;
        double r8229 = -r8228;
        double r8230 = r8228 * r8228;
        double r8231 = r8227 * r8224;
        double r8232 = a;
        double r8233 = r8231 * r8232;
        double r8234 = r8230 - r8233;
        double r8235 = sqrt(r8234);
        double r8236 = r8229 - r8235;
        double r8237 = r8227 / r8236;
        double r8238 = r8226 * r8237;
        return r8238;
}

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

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

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

static mpfr_t r8253, r8254, r8255, r8256, r8257, r8258, r8259, r8260, r8261, r8262, r8263, r8264, r8265, r8266, r8267;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8253, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8254, "2", 10, MPFR_RNDN);
        mpfr_init(r8255);
        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(r8267);
}

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

static mpfr_t r8268, r8269, r8270, r8271, r8272, r8273, r8274, r8275, r8276, r8277, r8278, r8279, r8280, r8281, r8282;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8268, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8269, "2", 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(r8277);
        mpfr_init(r8278);
        mpfr_init(r8279);
        mpfr_init(r8280);
        mpfr_init(r8281);
        mpfr_init(r8282);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8270, r8268, r8269, MPFR_RNDN);
        mpfr_set_d(r8271, c, MPFR_RNDN);
        mpfr_set_d(r8272, b, MPFR_RNDN);
        mpfr_neg(r8273, r8272, MPFR_RNDN);
        mpfr_mul(r8274, r8272, r8272, MPFR_RNDN);
        mpfr_mul(r8275, r8271, r8268, MPFR_RNDN);
        mpfr_set_d(r8276, a, MPFR_RNDN);
        mpfr_mul(r8277, r8275, r8276, MPFR_RNDN);
        mpfr_sub(r8278, r8274, r8277, MPFR_RNDN);
        mpfr_sqrt(r8279, r8278, MPFR_RNDN);
        mpfr_sub(r8280, r8273, r8279, MPFR_RNDN);
        mpfr_div(r8281, r8271, r8280, MPFR_RNDN);
        mpfr_mul(r8282, r8270, r8281, MPFR_RNDN);
        return mpfr_get_d(r8282, MPFR_RNDN);
}

