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

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

double f_if(float a, float b, float c) {
        float r8263 = b;
        float r8264 = -r8263;
        float r8265 = r8263 * r8263;
        float r8266 = 4;
        float r8267 = a;
        float r8268 = r8266 * r8267;
        float r8269 = c;
        float r8270 = r8268 * r8269;
        float r8271 = r8265 - r8270;
        float r8272 = sqrt(r8271);
        float r8273 = r8264 + r8272;
        float r8274 = 2;
        float r8275 = r8274 * r8267;
        float r8276 = r8273 / r8275;
        return r8276;
}

double f_id(double a, double b, double c) {
        double r8277 = b;
        double r8278 = -r8277;
        double r8279 = r8277 * r8277;
        double r8280 = 4;
        double r8281 = a;
        double r8282 = r8280 * r8281;
        double r8283 = c;
        double r8284 = r8282 * r8283;
        double r8285 = r8279 - r8284;
        double r8286 = sqrt(r8285);
        double r8287 = r8278 + r8286;
        double r8288 = 2;
        double r8289 = r8288 * r8281;
        double r8290 = r8287 / r8289;
        return r8290;
}


double f_of(float a, float b, float c) {
        float r8291 = 4;
        float r8292 = 2;
        float r8293 = r8291 / r8292;
        float r8294 = c;
        float r8295 = b;
        float r8296 = -r8295;
        float r8297 = r8295 * r8295;
        float r8298 = r8294 * r8291;
        float r8299 = a;
        float r8300 = r8298 * r8299;
        float r8301 = r8297 - r8300;
        float r8302 = sqrt(r8301);
        float r8303 = r8296 - r8302;
        float r8304 = r8294 / r8303;
        float r8305 = r8293 * r8304;
        return r8305;
}

double f_od(double a, double b, double c) {
        double r8306 = 4;
        double r8307 = 2;
        double r8308 = r8306 / r8307;
        double r8309 = c;
        double r8310 = b;
        double r8311 = -r8310;
        double r8312 = r8310 * r8310;
        double r8313 = r8309 * r8306;
        double r8314 = a;
        double r8315 = r8313 * r8314;
        double r8316 = r8312 - r8315;
        double r8317 = sqrt(r8316);
        double r8318 = r8311 - r8317;
        double r8319 = r8309 / r8318;
        double r8320 = r8308 * r8319;
        return r8320;
}

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 r8321, r8322, r8323, r8324, r8325, r8326, r8327, r8328, r8329, r8330, r8331, r8332, r8333, r8334;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8321);
        mpfr_init(r8322);
        mpfr_init(r8323);
        mpfr_init_set_str(r8324, "4", 10, MPFR_RNDN);
        mpfr_init(r8325);
        mpfr_init(r8326);
        mpfr_init(r8327);
        mpfr_init(r8328);
        mpfr_init(r8329);
        mpfr_init(r8330);
        mpfr_init(r8331);
        mpfr_init_set_str(r8332, "2", 10, MPFR_RNDN);
        mpfr_init(r8333);
        mpfr_init(r8334);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8321, b, MPFR_RNDN);
        mpfr_neg(r8322, r8321, MPFR_RNDN);
        mpfr_mul(r8323, r8321, r8321, MPFR_RNDN);
        ;
        mpfr_set_d(r8325, a, MPFR_RNDN);
        mpfr_mul(r8326, r8324, r8325, MPFR_RNDN);
        mpfr_set_d(r8327, c, MPFR_RNDN);
        mpfr_mul(r8328, r8326, r8327, MPFR_RNDN);
        mpfr_sub(r8329, r8323, r8328, MPFR_RNDN);
        mpfr_sqrt(r8330, r8329, MPFR_RNDN);
        mpfr_add(r8331, r8322, r8330, MPFR_RNDN);
        ;
        mpfr_mul(r8333, r8332, r8325, MPFR_RNDN);
        mpfr_div(r8334, r8331, r8333, MPFR_RNDN);
        return mpfr_get_d(r8334, MPFR_RNDN);
}

static mpfr_t r8335, r8336, r8337, r8338, r8339, r8340, r8341, r8342, r8343, r8344, r8345, r8346, r8347, r8348, r8349;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8335, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8336, "2", 10, MPFR_RNDN);
        mpfr_init(r8337);
        mpfr_init(r8338);
        mpfr_init(r8339);
        mpfr_init(r8340);
        mpfr_init(r8341);
        mpfr_init(r8342);
        mpfr_init(r8343);
        mpfr_init(r8344);
        mpfr_init(r8345);
        mpfr_init(r8346);
        mpfr_init(r8347);
        mpfr_init(r8348);
        mpfr_init(r8349);
}

double f_fm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8337, r8335, r8336, MPFR_RNDN);
        mpfr_set_d(r8338, c, MPFR_RNDN);
        mpfr_set_d(r8339, b, MPFR_RNDN);
        mpfr_neg(r8340, r8339, MPFR_RNDN);
        mpfr_mul(r8341, r8339, r8339, MPFR_RNDN);
        mpfr_mul(r8342, r8338, r8335, MPFR_RNDN);
        mpfr_set_d(r8343, a, MPFR_RNDN);
        mpfr_mul(r8344, r8342, r8343, MPFR_RNDN);
        mpfr_sub(r8345, r8341, r8344, MPFR_RNDN);
        mpfr_sqrt(r8346, r8345, MPFR_RNDN);
        mpfr_sub(r8347, r8340, r8346, MPFR_RNDN);
        mpfr_div(r8348, r8338, r8347, MPFR_RNDN);
        mpfr_mul(r8349, r8337, r8348, MPFR_RNDN);
        return mpfr_get_d(r8349, MPFR_RNDN);
}

static mpfr_t r8350, r8351, r8352, r8353, r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362, r8363, r8364;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8350, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8351, "2", 10, MPFR_RNDN);
        mpfr_init(r8352);
        mpfr_init(r8353);
        mpfr_init(r8354);
        mpfr_init(r8355);
        mpfr_init(r8356);
        mpfr_init(r8357);
        mpfr_init(r8358);
        mpfr_init(r8359);
        mpfr_init(r8360);
        mpfr_init(r8361);
        mpfr_init(r8362);
        mpfr_init(r8363);
        mpfr_init(r8364);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8352, r8350, r8351, MPFR_RNDN);
        mpfr_set_d(r8353, c, MPFR_RNDN);
        mpfr_set_d(r8354, b, MPFR_RNDN);
        mpfr_neg(r8355, r8354, MPFR_RNDN);
        mpfr_mul(r8356, r8354, r8354, MPFR_RNDN);
        mpfr_mul(r8357, r8353, r8350, MPFR_RNDN);
        mpfr_set_d(r8358, a, MPFR_RNDN);
        mpfr_mul(r8359, r8357, r8358, MPFR_RNDN);
        mpfr_sub(r8360, r8356, r8359, MPFR_RNDN);
        mpfr_sqrt(r8361, r8360, MPFR_RNDN);
        mpfr_sub(r8362, r8355, r8361, MPFR_RNDN);
        mpfr_div(r8363, r8353, r8362, MPFR_RNDN);
        mpfr_mul(r8364, r8352, r8363, MPFR_RNDN);
        return mpfr_get_d(r8364, MPFR_RNDN);
}

