#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 r18360256 = b;
        float r18360257 = -r18360256;
        float r18360258 = r18360256 * r18360256;
        float r18360259 = 4;
        float r18360260 = a;
        float r18360261 = r18360259 * r18360260;
        float r18360262 = c;
        float r18360263 = r18360261 * r18360262;
        float r18360264 = r18360258 - r18360263;
        float r18360265 = sqrt(r18360264);
        float r18360266 = r18360257 + r18360265;
        float r18360267 = 2;
        float r18360268 = r18360267 * r18360260;
        float r18360269 = r18360266 / r18360268;
        return r18360269;
}

double f_id(double a, double b, double c) {
        double r18360270 = b;
        double r18360271 = -r18360270;
        double r18360272 = r18360270 * r18360270;
        double r18360273 = 4;
        double r18360274 = a;
        double r18360275 = r18360273 * r18360274;
        double r18360276 = c;
        double r18360277 = r18360275 * r18360276;
        double r18360278 = r18360272 - r18360277;
        double r18360279 = sqrt(r18360278);
        double r18360280 = r18360271 + r18360279;
        double r18360281 = 2;
        double r18360282 = r18360281 * r18360274;
        double r18360283 = r18360280 / r18360282;
        return r18360283;
}


double f_of(float a, float b, float c) {
        float r18360284 = 4;
        float r18360285 = 2;
        float r18360286 = r18360284 / r18360285;
        float r18360287 = c;
        float r18360288 = b;
        float r18360289 = -r18360288;
        float r18360290 = r18360288 * r18360288;
        float r18360291 = a;
        float r18360292 = r18360291 * r18360287;
        float r18360293 = r18360292 * r18360284;
        float r18360294 = r18360290 - r18360293;
        float r18360295 = sqrt(r18360294);
        float r18360296 = r18360289 - r18360295;
        float r18360297 = r18360287 / r18360296;
        float r18360298 = r18360286 * r18360297;
        return r18360298;
}

double f_od(double a, double b, double c) {
        double r18360299 = 4;
        double r18360300 = 2;
        double r18360301 = r18360299 / r18360300;
        double r18360302 = c;
        double r18360303 = b;
        double r18360304 = -r18360303;
        double r18360305 = r18360303 * r18360303;
        double r18360306 = a;
        double r18360307 = r18360306 * r18360302;
        double r18360308 = r18360307 * r18360299;
        double r18360309 = r18360305 - r18360308;
        double r18360310 = sqrt(r18360309);
        double r18360311 = r18360304 - r18360310;
        double r18360312 = r18360302 / r18360311;
        double r18360313 = r18360301 * r18360312;
        return r18360313;
}

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 r18360314, r18360315, r18360316, r18360317, r18360318, r18360319, r18360320, r18360321, r18360322, r18360323, r18360324, r18360325, r18360326, r18360327;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(912);
        mpfr_init(r18360314);
        mpfr_init(r18360315);
        mpfr_init(r18360316);
        mpfr_init_set_str(r18360317, "4", 10, MPFR_RNDN);
        mpfr_init(r18360318);
        mpfr_init(r18360319);
        mpfr_init(r18360320);
        mpfr_init(r18360321);
        mpfr_init(r18360322);
        mpfr_init(r18360323);
        mpfr_init(r18360324);
        mpfr_init_set_str(r18360325, "2", 10, MPFR_RNDN);
        mpfr_init(r18360326);
        mpfr_init(r18360327);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r18360314, b, MPFR_RNDN);
        mpfr_neg(r18360315, r18360314, MPFR_RNDN);
        mpfr_mul(r18360316, r18360314, r18360314, MPFR_RNDN);
        ;
        mpfr_set_d(r18360318, a, MPFR_RNDN);
        mpfr_mul(r18360319, r18360317, r18360318, MPFR_RNDN);
        mpfr_set_d(r18360320, c, MPFR_RNDN);
        mpfr_mul(r18360321, r18360319, r18360320, MPFR_RNDN);
        mpfr_sub(r18360322, r18360316, r18360321, MPFR_RNDN);
        mpfr_sqrt(r18360323, r18360322, MPFR_RNDN);
        mpfr_add(r18360324, r18360315, r18360323, MPFR_RNDN);
        ;
        mpfr_mul(r18360326, r18360325, r18360318, MPFR_RNDN);
        mpfr_div(r18360327, r18360324, r18360326, MPFR_RNDN);
        return mpfr_get_d(r18360327, MPFR_RNDN);
}

static mpfr_t r18360328, r18360329, r18360330, r18360331, r18360332, r18360333, r18360334, r18360335, r18360336, r18360337, r18360338, r18360339, r18360340, r18360341, r18360342;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(912);
        mpfr_init_set_str(r18360328, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r18360329, "2", 10, MPFR_RNDN);
        mpfr_init(r18360330);
        mpfr_init(r18360331);
        mpfr_init(r18360332);
        mpfr_init(r18360333);
        mpfr_init(r18360334);
        mpfr_init(r18360335);
        mpfr_init(r18360336);
        mpfr_init(r18360337);
        mpfr_init(r18360338);
        mpfr_init(r18360339);
        mpfr_init(r18360340);
        mpfr_init(r18360341);
        mpfr_init(r18360342);
}

double f_fm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r18360330, r18360328, r18360329, MPFR_RNDN);
        mpfr_set_d(r18360331, c, MPFR_RNDN);
        mpfr_set_d(r18360332, b, MPFR_RNDN);
        mpfr_neg(r18360333, r18360332, MPFR_RNDN);
        mpfr_mul(r18360334, r18360332, r18360332, MPFR_RNDN);
        mpfr_set_d(r18360335, a, MPFR_RNDN);
        mpfr_mul(r18360336, r18360335, r18360331, MPFR_RNDN);
        mpfr_mul(r18360337, r18360336, r18360328, MPFR_RNDN);
        mpfr_sub(r18360338, r18360334, r18360337, MPFR_RNDN);
        mpfr_sqrt(r18360339, r18360338, MPFR_RNDN);
        mpfr_sub(r18360340, r18360333, r18360339, MPFR_RNDN);
        mpfr_div(r18360341, r18360331, r18360340, MPFR_RNDN);
        mpfr_mul(r18360342, r18360330, r18360341, MPFR_RNDN);
        return mpfr_get_d(r18360342, MPFR_RNDN);
}

static mpfr_t r18360343, r18360344, r18360345, r18360346, r18360347, r18360348, r18360349, r18360350, r18360351, r18360352, r18360353, r18360354, r18360355, r18360356, r18360357;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(912);
        mpfr_init_set_str(r18360343, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r18360344, "2", 10, MPFR_RNDN);
        mpfr_init(r18360345);
        mpfr_init(r18360346);
        mpfr_init(r18360347);
        mpfr_init(r18360348);
        mpfr_init(r18360349);
        mpfr_init(r18360350);
        mpfr_init(r18360351);
        mpfr_init(r18360352);
        mpfr_init(r18360353);
        mpfr_init(r18360354);
        mpfr_init(r18360355);
        mpfr_init(r18360356);
        mpfr_init(r18360357);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r18360345, r18360343, r18360344, MPFR_RNDN);
        mpfr_set_d(r18360346, c, MPFR_RNDN);
        mpfr_set_d(r18360347, b, MPFR_RNDN);
        mpfr_neg(r18360348, r18360347, MPFR_RNDN);
        mpfr_mul(r18360349, r18360347, r18360347, MPFR_RNDN);
        mpfr_set_d(r18360350, a, MPFR_RNDN);
        mpfr_mul(r18360351, r18360350, r18360346, MPFR_RNDN);
        mpfr_mul(r18360352, r18360351, r18360343, MPFR_RNDN);
        mpfr_sub(r18360353, r18360349, r18360352, MPFR_RNDN);
        mpfr_sqrt(r18360354, r18360353, MPFR_RNDN);
        mpfr_sub(r18360355, r18360348, r18360354, MPFR_RNDN);
        mpfr_div(r18360356, r18360346, r18360355, MPFR_RNDN);
        mpfr_mul(r18360357, r18360345, r18360356, MPFR_RNDN);
        return mpfr_get_d(r18360357, MPFR_RNDN);
}

