#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 r8385 = b;
        float r8386 = -r8385;
        float r8387 = r8385 * r8385;
        float r8388 = 4;
        float r8389 = a;
        float r8390 = r8388 * r8389;
        float r8391 = c;
        float r8392 = r8390 * r8391;
        float r8393 = r8387 - r8392;
        float r8394 = sqrt(r8393);
        float r8395 = r8386 + r8394;
        float r8396 = 2;
        float r8397 = r8396 * r8389;
        float r8398 = r8395 / r8397;
        return r8398;
}

double f_id(double a, double b, double c) {
        double r8399 = b;
        double r8400 = -r8399;
        double r8401 = r8399 * r8399;
        double r8402 = 4;
        double r8403 = a;
        double r8404 = r8402 * r8403;
        double r8405 = c;
        double r8406 = r8404 * r8405;
        double r8407 = r8401 - r8406;
        double r8408 = sqrt(r8407);
        double r8409 = r8400 + r8408;
        double r8410 = 2;
        double r8411 = r8410 * r8403;
        double r8412 = r8409 / r8411;
        return r8412;
}


double f_of(float a, float b, float c) {
        float r8413 = 1;
        float r8414 = 2;
        float r8415 = r8413 / r8414;
        float r8416 = c;
        float r8417 = 4;
        float r8418 = r8416 * r8417;
        float r8419 = b;
        float r8420 = -r8419;
        float r8421 = a;
        float r8422 = r8421 * r8417;
        float r8423 = -r8416;
        float r8424 = r8419 * r8419;
        float r8425 = fma(r8422, r8423, r8424);
        float r8426 = sqrt(r8425);
        float r8427 = r8420 - r8426;
        float r8428 = r8418 / r8427;
        float r8429 = r8415 * r8428;
        return r8429;
}

double f_od(double a, double b, double c) {
        double r8430 = 1;
        double r8431 = 2;
        double r8432 = r8430 / r8431;
        double r8433 = c;
        double r8434 = 4;
        double r8435 = r8433 * r8434;
        double r8436 = b;
        double r8437 = -r8436;
        double r8438 = a;
        double r8439 = r8438 * r8434;
        double r8440 = -r8433;
        double r8441 = r8436 * r8436;
        double r8442 = fma(r8439, r8440, r8441);
        double r8443 = sqrt(r8442);
        double r8444 = r8437 - r8443;
        double r8445 = r8435 / r8444;
        double r8446 = r8432 * r8445;
        return r8446;
}

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 r8447, r8448, r8449, r8450, r8451, r8452, r8453, r8454, r8455, r8456, r8457, r8458, r8459, r8460;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(848);
        mpfr_init(r8447);
        mpfr_init(r8448);
        mpfr_init(r8449);
        mpfr_init_set_str(r8450, "4", 10, MPFR_RNDN);
        mpfr_init(r8451);
        mpfr_init(r8452);
        mpfr_init(r8453);
        mpfr_init(r8454);
        mpfr_init(r8455);
        mpfr_init(r8456);
        mpfr_init(r8457);
        mpfr_init_set_str(r8458, "2", 10, MPFR_RNDN);
        mpfr_init(r8459);
        mpfr_init(r8460);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8447, b, MPFR_RNDN);
        mpfr_neg(r8448, r8447, MPFR_RNDN);
        mpfr_mul(r8449, r8447, r8447, MPFR_RNDN);
        ;
        mpfr_set_d(r8451, a, MPFR_RNDN);
        mpfr_mul(r8452, r8450, r8451, MPFR_RNDN);
        mpfr_set_d(r8453, c, MPFR_RNDN);
        mpfr_mul(r8454, r8452, r8453, MPFR_RNDN);
        mpfr_sub(r8455, r8449, r8454, MPFR_RNDN);
        mpfr_sqrt(r8456, r8455, MPFR_RNDN);
        mpfr_add(r8457, r8448, r8456, MPFR_RNDN);
        ;
        mpfr_mul(r8459, r8458, r8451, MPFR_RNDN);
        mpfr_div(r8460, r8457, r8459, MPFR_RNDN);
        return mpfr_get_d(r8460, MPFR_RNDN);
}

static mpfr_t r8461, r8462, r8463, r8464, r8465, r8466, r8467, r8468, r8469, r8470, r8471, r8472, r8473, r8474, r8475, r8476, r8477;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8461, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8462, "2", 10, MPFR_RNDN);
        mpfr_init(r8463);
        mpfr_init(r8464);
        mpfr_init_set_str(r8465, "4", 10, MPFR_RNDN);
        mpfr_init(r8466);
        mpfr_init(r8467);
        mpfr_init(r8468);
        mpfr_init(r8469);
        mpfr_init(r8470);
        mpfr_init(r8471);
        mpfr_init(r8472);
        mpfr_init(r8473);
        mpfr_init(r8474);
        mpfr_init(r8475);
        mpfr_init(r8476);
        mpfr_init(r8477);
}

double f_fm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8463, r8461, r8462, MPFR_RNDN);
        mpfr_set_d(r8464, c, MPFR_RNDN);
        ;
        mpfr_mul(r8466, r8464, r8465, MPFR_RNDN);
        mpfr_set_d(r8467, b, MPFR_RNDN);
        mpfr_neg(r8468, r8467, MPFR_RNDN);
        mpfr_set_d(r8469, a, MPFR_RNDN);
        mpfr_mul(r8470, r8469, r8465, MPFR_RNDN);
        mpfr_neg(r8471, r8464, MPFR_RNDN);
        mpfr_mul(r8472, r8467, r8467, MPFR_RNDN);
        mpfr_fma(r8473, r8470, r8471, r8472, MPFR_RNDN);
        mpfr_sqrt(r8474, r8473, MPFR_RNDN);
        mpfr_sub(r8475, r8468, r8474, MPFR_RNDN);
        mpfr_div(r8476, r8466, r8475, MPFR_RNDN);
        mpfr_mul(r8477, r8463, r8476, MPFR_RNDN);
        return mpfr_get_d(r8477, MPFR_RNDN);
}

static mpfr_t r8478, r8479, r8480, r8481, r8482, r8483, r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(848);
        mpfr_init_set_str(r8478, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8479, "2", 10, MPFR_RNDN);
        mpfr_init(r8480);
        mpfr_init(r8481);
        mpfr_init_set_str(r8482, "4", 10, MPFR_RNDN);
        mpfr_init(r8483);
        mpfr_init(r8484);
        mpfr_init(r8485);
        mpfr_init(r8486);
        mpfr_init(r8487);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init(r8492);
        mpfr_init(r8493);
        mpfr_init(r8494);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8480, r8478, r8479, MPFR_RNDN);
        mpfr_set_d(r8481, c, MPFR_RNDN);
        ;
        mpfr_mul(r8483, r8481, r8482, MPFR_RNDN);
        mpfr_set_d(r8484, b, MPFR_RNDN);
        mpfr_neg(r8485, r8484, MPFR_RNDN);
        mpfr_set_d(r8486, a, MPFR_RNDN);
        mpfr_mul(r8487, r8486, r8482, MPFR_RNDN);
        mpfr_neg(r8488, r8481, MPFR_RNDN);
        mpfr_mul(r8489, r8484, r8484, MPFR_RNDN);
        mpfr_fma(r8490, r8487, r8488, r8489, MPFR_RNDN);
        mpfr_sqrt(r8491, r8490, MPFR_RNDN);
        mpfr_sub(r8492, r8485, r8491, MPFR_RNDN);
        mpfr_div(r8493, r8483, r8492, MPFR_RNDN);
        mpfr_mul(r8494, r8480, r8493, MPFR_RNDN);
        return mpfr_get_d(r8494, MPFR_RNDN);
}

