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

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

double f_if(float a, float b, float c) {
        float r8393 = b;
        float r8394 = -r8393;
        float r8395 = r8393 * r8393;
        float r8396 = 4;
        float r8397 = a;
        float r8398 = r8396 * r8397;
        float r8399 = c;
        float r8400 = r8398 * r8399;
        float r8401 = r8395 - r8400;
        float r8402 = sqrt(r8401);
        float r8403 = r8394 + r8402;
        float r8404 = 2;
        float r8405 = r8404 * r8397;
        float r8406 = r8403 / r8405;
        return r8406;
}

double f_id(double a, double b, double c) {
        double r8407 = b;
        double r8408 = -r8407;
        double r8409 = r8407 * r8407;
        double r8410 = 4;
        double r8411 = a;
        double r8412 = r8410 * r8411;
        double r8413 = c;
        double r8414 = r8412 * r8413;
        double r8415 = r8409 - r8414;
        double r8416 = sqrt(r8415);
        double r8417 = r8408 + r8416;
        double r8418 = 2;
        double r8419 = r8418 * r8411;
        double r8420 = r8417 / r8419;
        return r8420;
}


double f_of(float a, float b, float c) {
        float r8421 = c;
        float r8422 = 2;
        float r8423 = r8421 / r8422;
        float r8424 = -r8423;
        float r8425 = 4;
        float r8426 = b;
        float r8427 = -r8421;
        float r8428 = a;
        float r8429 = r8425 * r8428;
        float r8430 = r8426 * r8426;
        float r8431 = fma(r8427, r8429, r8430);
        float r8432 = sqrt(r8431);
        float r8433 = r8426 + r8432;
        float r8434 = r8425 / r8433;
        float r8435 = r8424 * r8434;
        return r8435;
}

double f_od(double a, double b, double c) {
        double r8436 = c;
        double r8437 = 2;
        double r8438 = r8436 / r8437;
        double r8439 = -r8438;
        double r8440 = 4;
        double r8441 = b;
        double r8442 = -r8436;
        double r8443 = a;
        double r8444 = r8440 * r8443;
        double r8445 = r8441 * r8441;
        double r8446 = fma(r8442, r8444, r8445);
        double r8447 = sqrt(r8446);
        double r8448 = r8441 + r8447;
        double r8449 = r8440 / r8448;
        double r8450 = r8439 * r8449;
        return r8450;
}

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 r8451, r8452, r8453, r8454, r8455, r8456, r8457, r8458, r8459, r8460, r8461, r8462, r8463, r8464;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8451);
        mpfr_init(r8452);
        mpfr_init(r8453);
        mpfr_init_set_str(r8454, "4", 10, MPFR_RNDN);
        mpfr_init(r8455);
        mpfr_init(r8456);
        mpfr_init(r8457);
        mpfr_init(r8458);
        mpfr_init(r8459);
        mpfr_init(r8460);
        mpfr_init(r8461);
        mpfr_init_set_str(r8462, "2", 10, MPFR_RNDN);
        mpfr_init(r8463);
        mpfr_init(r8464);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8451, b, MPFR_RNDN);
        mpfr_neg(r8452, r8451, MPFR_RNDN);
        mpfr_mul(r8453, r8451, r8451, MPFR_RNDN);
        ;
        mpfr_set_d(r8455, a, MPFR_RNDN);
        mpfr_mul(r8456, r8454, r8455, MPFR_RNDN);
        mpfr_set_d(r8457, c, MPFR_RNDN);
        mpfr_mul(r8458, r8456, r8457, MPFR_RNDN);
        mpfr_sub(r8459, r8453, r8458, MPFR_RNDN);
        mpfr_sqrt(r8460, r8459, MPFR_RNDN);
        mpfr_add(r8461, r8452, r8460, MPFR_RNDN);
        ;
        mpfr_mul(r8463, r8462, r8455, MPFR_RNDN);
        mpfr_div(r8464, r8461, r8463, MPFR_RNDN);
        return mpfr_get_d(r8464, MPFR_RNDN);
}

static mpfr_t r8465, r8466, r8467, r8468, r8469, r8470, r8471, r8472, r8473, r8474, r8475, r8476, r8477, r8478, r8479;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8465);
        mpfr_init_set_str(r8466, "2", 10, MPFR_RNDN);
        mpfr_init(r8467);
        mpfr_init(r8468);
        mpfr_init_set_str(r8469, "4", 10, MPFR_RNDN);
        mpfr_init(r8470);
        mpfr_init(r8471);
        mpfr_init(r8472);
        mpfr_init(r8473);
        mpfr_init(r8474);
        mpfr_init(r8475);
        mpfr_init(r8476);
        mpfr_init(r8477);
        mpfr_init(r8478);
        mpfr_init(r8479);
}

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

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

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8480);
        mpfr_init_set_str(r8481, "2", 10, MPFR_RNDN);
        mpfr_init(r8482);
        mpfr_init(r8483);
        mpfr_init_set_str(r8484, "4", 10, MPFR_RNDN);
        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_set_d(r8480, c, MPFR_RNDN);
        ;
        mpfr_div(r8482, r8480, r8481, MPFR_RNDN);
        mpfr_neg(r8483, r8482, MPFR_RNDN);
        ;
        mpfr_set_d(r8485, b, MPFR_RNDN);
        mpfr_neg(r8486, r8480, MPFR_RNDN);
        mpfr_set_d(r8487, a, MPFR_RNDN);
        mpfr_mul(r8488, r8484, r8487, MPFR_RNDN);
        mpfr_mul(r8489, r8485, r8485, MPFR_RNDN);
        mpfr_fma(r8490, r8486, r8488, r8489, MPFR_RNDN);
        mpfr_sqrt(r8491, r8490, MPFR_RNDN);
        mpfr_add(r8492, r8485, r8491, MPFR_RNDN);
        mpfr_div(r8493, r8484, r8492, MPFR_RNDN);
        mpfr_mul(r8494, r8483, r8493, MPFR_RNDN);
        return mpfr_get_d(r8494, MPFR_RNDN);
}

