#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 r8425 = b;
        float r8426 = -r8425;
        float r8427 = r8425 * r8425;
        float r8428 = 4;
        float r8429 = a;
        float r8430 = r8428 * r8429;
        float r8431 = c;
        float r8432 = r8430 * r8431;
        float r8433 = r8427 - r8432;
        float r8434 = sqrt(r8433);
        float r8435 = r8426 + r8434;
        float r8436 = 2;
        float r8437 = r8436 * r8429;
        float r8438 = r8435 / r8437;
        return r8438;
}

double f_id(double a, double b, double c) {
        double r8439 = b;
        double r8440 = -r8439;
        double r8441 = r8439 * r8439;
        double r8442 = 4;
        double r8443 = a;
        double r8444 = r8442 * r8443;
        double r8445 = c;
        double r8446 = r8444 * r8445;
        double r8447 = r8441 - r8446;
        double r8448 = sqrt(r8447);
        double r8449 = r8440 + r8448;
        double r8450 = 2;
        double r8451 = r8450 * r8443;
        double r8452 = r8449 / r8451;
        return r8452;
}


double f_of(float a, float b, float c) {
        float r8453 = 4;
        float r8454 = 2;
        float r8455 = r8453 / r8454;
        float r8456 = c;
        float r8457 = b;
        float r8458 = -r8457;
        float r8459 = r8457 * r8457;
        float r8460 = r8456 * r8453;
        float r8461 = a;
        float r8462 = r8460 * r8461;
        float r8463 = r8459 - r8462;
        float r8464 = sqrt(r8463);
        float r8465 = r8458 - r8464;
        float r8466 = r8456 / r8465;
        float r8467 = r8455 * r8466;
        return r8467;
}

double f_od(double a, double b, double c) {
        double r8468 = 4;
        double r8469 = 2;
        double r8470 = r8468 / r8469;
        double r8471 = c;
        double r8472 = b;
        double r8473 = -r8472;
        double r8474 = r8472 * r8472;
        double r8475 = r8471 * r8468;
        double r8476 = a;
        double r8477 = r8475 * r8476;
        double r8478 = r8474 - r8477;
        double r8479 = sqrt(r8478);
        double r8480 = r8473 - r8479;
        double r8481 = r8471 / r8480;
        double r8482 = r8470 * r8481;
        return r8482;
}

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 r8483, r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495, r8496;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8483);
        mpfr_init(r8484);
        mpfr_init(r8485);
        mpfr_init_set_str(r8486, "4", 10, MPFR_RNDN);
        mpfr_init(r8487);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init(r8492);
        mpfr_init(r8493);
        mpfr_init_set_str(r8494, "2", 10, MPFR_RNDN);
        mpfr_init(r8495);
        mpfr_init(r8496);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8483, b, MPFR_RNDN);
        mpfr_neg(r8484, r8483, MPFR_RNDN);
        mpfr_mul(r8485, r8483, r8483, MPFR_RNDN);
        ;
        mpfr_set_d(r8487, a, MPFR_RNDN);
        mpfr_mul(r8488, r8486, r8487, MPFR_RNDN);
        mpfr_set_d(r8489, c, MPFR_RNDN);
        mpfr_mul(r8490, r8488, r8489, MPFR_RNDN);
        mpfr_sub(r8491, r8485, r8490, MPFR_RNDN);
        mpfr_sqrt(r8492, r8491, MPFR_RNDN);
        mpfr_add(r8493, r8484, r8492, MPFR_RNDN);
        ;
        mpfr_mul(r8495, r8494, r8487, MPFR_RNDN);
        mpfr_div(r8496, r8493, r8495, MPFR_RNDN);
        return mpfr_get_d(r8496, MPFR_RNDN);
}

static mpfr_t r8497, r8498, r8499, r8500, r8501, r8502, r8503, r8504, r8505, r8506, r8507, r8508, r8509, r8510, r8511;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8497, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8498, "2", 10, MPFR_RNDN);
        mpfr_init(r8499);
        mpfr_init(r8500);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
        mpfr_init(r8505);
        mpfr_init(r8506);
        mpfr_init(r8507);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init(r8511);
}

double f_fm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8499, r8497, r8498, MPFR_RNDN);
        mpfr_set_d(r8500, c, MPFR_RNDN);
        mpfr_set_d(r8501, b, MPFR_RNDN);
        mpfr_neg(r8502, r8501, MPFR_RNDN);
        mpfr_mul(r8503, r8501, r8501, MPFR_RNDN);
        mpfr_mul(r8504, r8500, r8497, MPFR_RNDN);
        mpfr_set_d(r8505, a, MPFR_RNDN);
        mpfr_mul(r8506, r8504, r8505, MPFR_RNDN);
        mpfr_sub(r8507, r8503, r8506, MPFR_RNDN);
        mpfr_sqrt(r8508, r8507, MPFR_RNDN);
        mpfr_sub(r8509, r8502, r8508, MPFR_RNDN);
        mpfr_div(r8510, r8500, r8509, MPFR_RNDN);
        mpfr_mul(r8511, r8499, r8510, MPFR_RNDN);
        return mpfr_get_d(r8511, MPFR_RNDN);
}

static mpfr_t r8512, r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521, r8522, r8523, r8524, r8525, r8526;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8512, "4", 10, MPFR_RNDN);
        mpfr_init_set_str(r8513, "2", 10, MPFR_RNDN);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init(r8521);
        mpfr_init(r8522);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init(r8525);
        mpfr_init(r8526);
}

double f_dm(double a, double b, double c) {
        ;
        ;
        mpfr_div(r8514, r8512, r8513, MPFR_RNDN);
        mpfr_set_d(r8515, c, MPFR_RNDN);
        mpfr_set_d(r8516, b, MPFR_RNDN);
        mpfr_neg(r8517, r8516, MPFR_RNDN);
        mpfr_mul(r8518, r8516, r8516, MPFR_RNDN);
        mpfr_mul(r8519, r8515, r8512, MPFR_RNDN);
        mpfr_set_d(r8520, a, MPFR_RNDN);
        mpfr_mul(r8521, r8519, r8520, MPFR_RNDN);
        mpfr_sub(r8522, r8518, r8521, MPFR_RNDN);
        mpfr_sqrt(r8523, r8522, MPFR_RNDN);
        mpfr_sub(r8524, r8517, r8523, MPFR_RNDN);
        mpfr_div(r8525, r8515, r8524, MPFR_RNDN);
        mpfr_mul(r8526, r8514, r8525, MPFR_RNDN);
        return mpfr_get_d(r8526, MPFR_RNDN);
}

