#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 r8291 = b;
        float r8292 = -r8291;
        float r8293 = r8291 * r8291;
        float r8294 = 4;
        float r8295 = a;
        float r8296 = r8294 * r8295;
        float r8297 = c;
        float r8298 = r8296 * r8297;
        float r8299 = r8293 - r8298;
        float r8300 = sqrt(r8299);
        float r8301 = r8292 + r8300;
        float r8302 = 2;
        float r8303 = r8302 * r8295;
        float r8304 = r8301 / r8303;
        return r8304;
}

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


double f_of(float a, float b, float c) {
        float r8319 = c;
        float r8320 = 2;
        float r8321 = r8319 / r8320;
        float r8322 = -r8321;
        float r8323 = 4;
        float r8324 = b;
        float r8325 = -r8319;
        float r8326 = a;
        float r8327 = r8323 * r8326;
        float r8328 = r8324 * r8324;
        float r8329 = fma(r8325, r8327, r8328);
        float r8330 = sqrt(r8329);
        float r8331 = r8324 + r8330;
        float r8332 = r8323 / r8331;
        float r8333 = r8322 * r8332;
        return r8333;
}

double f_od(double a, double b, double c) {
        double r8334 = c;
        double r8335 = 2;
        double r8336 = r8334 / r8335;
        double r8337 = -r8336;
        double r8338 = 4;
        double r8339 = b;
        double r8340 = -r8334;
        double r8341 = a;
        double r8342 = r8338 * r8341;
        double r8343 = r8339 * r8339;
        double r8344 = fma(r8340, r8342, r8343);
        double r8345 = sqrt(r8344);
        double r8346 = r8339 + r8345;
        double r8347 = r8338 / r8346;
        double r8348 = r8337 * r8347;
        return r8348;
}

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 r8349, r8350, r8351, r8352, r8353, r8354, r8355, r8356, r8357, r8358, r8359, r8360, r8361, r8362;

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

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

static mpfr_t r8363, r8364, r8365, r8366, r8367, r8368, r8369, r8370, r8371, r8372, r8373, r8374, r8375, r8376, r8377;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8363);
        mpfr_init_set_str(r8364, "2", 10, MPFR_RNDN);
        mpfr_init(r8365);
        mpfr_init(r8366);
        mpfr_init_set_str(r8367, "4", 10, MPFR_RNDN);
        mpfr_init(r8368);
        mpfr_init(r8369);
        mpfr_init(r8370);
        mpfr_init(r8371);
        mpfr_init(r8372);
        mpfr_init(r8373);
        mpfr_init(r8374);
        mpfr_init(r8375);
        mpfr_init(r8376);
        mpfr_init(r8377);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r8363, c, MPFR_RNDN);
        ;
        mpfr_div(r8365, r8363, r8364, MPFR_RNDN);
        mpfr_neg(r8366, r8365, MPFR_RNDN);
        ;
        mpfr_set_d(r8368, b, MPFR_RNDN);
        mpfr_neg(r8369, r8363, MPFR_RNDN);
        mpfr_set_d(r8370, a, MPFR_RNDN);
        mpfr_mul(r8371, r8367, r8370, MPFR_RNDN);
        mpfr_mul(r8372, r8368, r8368, MPFR_RNDN);
        mpfr_fma(r8373, r8369, r8371, r8372, MPFR_RNDN);
        mpfr_sqrt(r8374, r8373, MPFR_RNDN);
        mpfr_add(r8375, r8368, r8374, MPFR_RNDN);
        mpfr_div(r8376, r8367, r8375, MPFR_RNDN);
        mpfr_mul(r8377, r8366, r8376, MPFR_RNDN);
        return mpfr_get_d(r8377, MPFR_RNDN);
}

static mpfr_t r8378, r8379, r8380, r8381, r8382, r8383, r8384, r8385, r8386, r8387, r8388, r8389, r8390, r8391, r8392;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8378);
        mpfr_init_set_str(r8379, "2", 10, MPFR_RNDN);
        mpfr_init(r8380);
        mpfr_init(r8381);
        mpfr_init_set_str(r8382, "4", 10, MPFR_RNDN);
        mpfr_init(r8383);
        mpfr_init(r8384);
        mpfr_init(r8385);
        mpfr_init(r8386);
        mpfr_init(r8387);
        mpfr_init(r8388);
        mpfr_init(r8389);
        mpfr_init(r8390);
        mpfr_init(r8391);
        mpfr_init(r8392);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r8378, c, MPFR_RNDN);
        ;
        mpfr_div(r8380, r8378, r8379, MPFR_RNDN);
        mpfr_neg(r8381, r8380, MPFR_RNDN);
        ;
        mpfr_set_d(r8383, b, MPFR_RNDN);
        mpfr_neg(r8384, r8378, MPFR_RNDN);
        mpfr_set_d(r8385, a, MPFR_RNDN);
        mpfr_mul(r8386, r8382, r8385, MPFR_RNDN);
        mpfr_mul(r8387, r8383, r8383, MPFR_RNDN);
        mpfr_fma(r8388, r8384, r8386, r8387, MPFR_RNDN);
        mpfr_sqrt(r8389, r8388, MPFR_RNDN);
        mpfr_add(r8390, r8383, r8389, MPFR_RNDN);
        mpfr_div(r8391, r8382, r8390, MPFR_RNDN);
        mpfr_mul(r8392, r8381, r8391, MPFR_RNDN);
        return mpfr_get_d(r8392, MPFR_RNDN);
}

