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

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

double f_if(float a, float b, float c) {
        float r8412 = b;
        float r8413 = -r8412;
        float r8414 = r8412 * r8412;
        float r8415 = 4;
        float r8416 = a;
        float r8417 = r8415 * r8416;
        float r8418 = c;
        float r8419 = r8417 * r8418;
        float r8420 = r8414 - r8419;
        float r8421 = sqrt(r8420);
        float r8422 = r8413 + r8421;
        float r8423 = 2;
        float r8424 = r8423 * r8416;
        float r8425 = r8422 / r8424;
        return r8425;
}

double f_id(double a, double b, double c) {
        double r8426 = b;
        double r8427 = -r8426;
        double r8428 = r8426 * r8426;
        double r8429 = 4;
        double r8430 = a;
        double r8431 = r8429 * r8430;
        double r8432 = c;
        double r8433 = r8431 * r8432;
        double r8434 = r8428 - r8433;
        double r8435 = sqrt(r8434);
        double r8436 = r8427 + r8435;
        double r8437 = 2;
        double r8438 = r8437 * r8430;
        double r8439 = r8436 / r8438;
        return r8439;
}


double f_of(float a, float b, float c) {
        float r8440 = b;
        float r8441 = -1.1514098544621335e+149;
        bool r8442 = r8440 <= r8441;
        float r8443 = c;
        float r8444 = r8443 / r8440;
        float r8445 = a;
        float r8446 = r8440 / r8445;
        float r8447 = r8444 - r8446;
        float r8448 = 7.62296366921463e-119;
        bool r8449 = r8440 <= r8448;
        float r8450 = r8440 * r8440;
        float r8451 = 4;
        float r8452 = r8451 * r8445;
        float r8453 = r8452 * r8443;
        float r8454 = r8450 - r8453;
        float r8455 = sqrt(r8454);
        float r8456 = -r8440;
        float r8457 = r8455 + r8456;
        float r8458 = 2;
        float r8459 = r8458 * r8445;
        float r8460 = r8457 / r8459;
        float r8461 = 3.128421125733265e+92;
        bool r8462 = r8440 <= r8461;
        float r8463 = -r8443;
        float r8464 = r8452 * r8463;
        float r8465 = fma(r8452, r8463, r8450);
        float r8466 = sqrt(r8465);
        float r8467 = r8440 + r8466;
        float r8468 = r8464 / r8467;
        float r8469 = r8468 / r8459;
        float r8470 = -r8444;
        float r8471 = r8462 ? r8469 : r8470;
        float r8472 = r8449 ? r8460 : r8471;
        float r8473 = r8442 ? r8447 : r8472;
        return r8473;
}

double f_od(double a, double b, double c) {
        double r8474 = b;
        double r8475 = -1.1514098544621335e+149;
        bool r8476 = r8474 <= r8475;
        double r8477 = c;
        double r8478 = r8477 / r8474;
        double r8479 = a;
        double r8480 = r8474 / r8479;
        double r8481 = r8478 - r8480;
        double r8482 = 7.62296366921463e-119;
        bool r8483 = r8474 <= r8482;
        double r8484 = r8474 * r8474;
        double r8485 = 4;
        double r8486 = r8485 * r8479;
        double r8487 = r8486 * r8477;
        double r8488 = r8484 - r8487;
        double r8489 = sqrt(r8488);
        double r8490 = -r8474;
        double r8491 = r8489 + r8490;
        double r8492 = 2;
        double r8493 = r8492 * r8479;
        double r8494 = r8491 / r8493;
        double r8495 = 3.128421125733265e+92;
        bool r8496 = r8474 <= r8495;
        double r8497 = -r8477;
        double r8498 = r8486 * r8497;
        double r8499 = fma(r8486, r8497, r8484);
        double r8500 = sqrt(r8499);
        double r8501 = r8474 + r8500;
        double r8502 = r8498 / r8501;
        double r8503 = r8502 / r8493;
        double r8504 = -r8478;
        double r8505 = r8496 ? r8503 : r8504;
        double r8506 = r8483 ? r8494 : r8505;
        double r8507 = r8476 ? r8481 : r8506;
        return r8507;
}

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 r8508, r8509, r8510, r8511, r8512, r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init_set_str(r8511, "4", 10, MPFR_RNDN);
        mpfr_init(r8512);
        mpfr_init(r8513);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init_set_str(r8519, "2", 10, MPFR_RNDN);
        mpfr_init(r8520);
        mpfr_init(r8521);
}

double f_im(double a, double b, double c) {
        mpfr_set_d(r8508, b, MPFR_RNDN);
        mpfr_neg(r8509, r8508, MPFR_RNDN);
        mpfr_mul(r8510, r8508, r8508, MPFR_RNDN);
        ;
        mpfr_set_d(r8512, a, MPFR_RNDN);
        mpfr_mul(r8513, r8511, r8512, MPFR_RNDN);
        mpfr_set_d(r8514, c, MPFR_RNDN);
        mpfr_mul(r8515, r8513, r8514, MPFR_RNDN);
        mpfr_sub(r8516, r8510, r8515, MPFR_RNDN);
        mpfr_sqrt(r8517, r8516, MPFR_RNDN);
        mpfr_add(r8518, r8509, r8517, MPFR_RNDN);
        ;
        mpfr_mul(r8520, r8519, r8512, MPFR_RNDN);
        mpfr_div(r8521, r8518, r8520, MPFR_RNDN);
        return mpfr_get_d(r8521, MPFR_RNDN);
}

static mpfr_t r8522, r8523, r8524, r8525, r8526, r8527, r8528, r8529, r8530, r8531, r8532, r8533, r8534, r8535, r8536, r8537, r8538, r8539, r8540, r8541, r8542, r8543, r8544, r8545, r8546, r8547, r8548, r8549, r8550, r8551, r8552, r8553, r8554, r8555;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r8522);
        mpfr_init_set_str(r8523, "-1.1514098544621335e+149", 10, MPFR_RNDN);
        mpfr_init(r8524);
        mpfr_init(r8525);
        mpfr_init(r8526);
        mpfr_init(r8527);
        mpfr_init(r8528);
        mpfr_init(r8529);
        mpfr_init_set_str(r8530, "7.62296366921463e-119", 10, MPFR_RNDN);
        mpfr_init(r8531);
        mpfr_init(r8532);
        mpfr_init_set_str(r8533, "4", 10, MPFR_RNDN);
        mpfr_init(r8534);
        mpfr_init(r8535);
        mpfr_init(r8536);
        mpfr_init(r8537);
        mpfr_init(r8538);
        mpfr_init(r8539);
        mpfr_init_set_str(r8540, "2", 10, MPFR_RNDN);
        mpfr_init(r8541);
        mpfr_init(r8542);
        mpfr_init_set_str(r8543, "3.128421125733265e+92", 10, MPFR_RNDN);
        mpfr_init(r8544);
        mpfr_init(r8545);
        mpfr_init(r8546);
        mpfr_init(r8547);
        mpfr_init(r8548);
        mpfr_init(r8549);
        mpfr_init(r8550);
        mpfr_init(r8551);
        mpfr_init(r8552);
        mpfr_init(r8553);
        mpfr_init(r8554);
        mpfr_init(r8555);
}

double f_fm(double a, double b, double c) {
        mpfr_set_d(r8522, b, MPFR_RNDN);
        ;
        mpfr_set_si(r8524, mpfr_cmp(r8522, r8523) <= 0, MPFR_RNDN);
        mpfr_set_d(r8525, c, MPFR_RNDN);
        mpfr_div(r8526, r8525, r8522, MPFR_RNDN);
        mpfr_set_d(r8527, a, MPFR_RNDN);
        mpfr_div(r8528, r8522, r8527, MPFR_RNDN);
        mpfr_sub(r8529, r8526, r8528, MPFR_RNDN);
        ;
        mpfr_set_si(r8531, mpfr_cmp(r8522, r8530) <= 0, MPFR_RNDN);
        mpfr_mul(r8532, r8522, r8522, MPFR_RNDN);
        ;
        mpfr_mul(r8534, r8533, r8527, MPFR_RNDN);
        mpfr_mul(r8535, r8534, r8525, MPFR_RNDN);
        mpfr_sub(r8536, r8532, r8535, MPFR_RNDN);
        mpfr_sqrt(r8537, r8536, MPFR_RNDN);
        mpfr_neg(r8538, r8522, MPFR_RNDN);
        mpfr_add(r8539, r8537, r8538, MPFR_RNDN);
        ;
        mpfr_mul(r8541, r8540, r8527, MPFR_RNDN);
        mpfr_div(r8542, r8539, r8541, MPFR_RNDN);
        ;
        mpfr_set_si(r8544, mpfr_cmp(r8522, r8543) <= 0, MPFR_RNDN);
        mpfr_neg(r8545, r8525, MPFR_RNDN);
        mpfr_mul(r8546, r8534, r8545, MPFR_RNDN);
        mpfr_fma(r8547, r8534, r8545, r8532, MPFR_RNDN);
        mpfr_sqrt(r8548, r8547, MPFR_RNDN);
        mpfr_add(r8549, r8522, r8548, MPFR_RNDN);
        mpfr_div(r8550, r8546, r8549, MPFR_RNDN);
        mpfr_div(r8551, r8550, r8541, MPFR_RNDN);
        mpfr_neg(r8552, r8526, MPFR_RNDN);
        if (mpfr_get_si(r8544, MPFR_RNDN)) { mpfr_set(r8553, r8551, MPFR_RNDN); } else { mpfr_set(r8553, r8552, MPFR_RNDN); };
        if (mpfr_get_si(r8531, MPFR_RNDN)) { mpfr_set(r8554, r8542, MPFR_RNDN); } else { mpfr_set(r8554, r8553, MPFR_RNDN); };
        if (mpfr_get_si(r8524, MPFR_RNDN)) { mpfr_set(r8555, r8529, MPFR_RNDN); } else { mpfr_set(r8555, r8554, MPFR_RNDN); };
        return mpfr_get_d(r8555, MPFR_RNDN);
}

static mpfr_t r8556, r8557, r8558, r8559, r8560, r8561, r8562, r8563, r8564, r8565, r8566, r8567, r8568, r8569, r8570, r8571, r8572, r8573, r8574, r8575, r8576, r8577, r8578, r8579, r8580, r8581, r8582, r8583, r8584, r8585, r8586, r8587, r8588, r8589;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r8556);
        mpfr_init_set_str(r8557, "-1.1514098544621335e+149", 10, MPFR_RNDN);
        mpfr_init(r8558);
        mpfr_init(r8559);
        mpfr_init(r8560);
        mpfr_init(r8561);
        mpfr_init(r8562);
        mpfr_init(r8563);
        mpfr_init_set_str(r8564, "7.62296366921463e-119", 10, MPFR_RNDN);
        mpfr_init(r8565);
        mpfr_init(r8566);
        mpfr_init_set_str(r8567, "4", 10, MPFR_RNDN);
        mpfr_init(r8568);
        mpfr_init(r8569);
        mpfr_init(r8570);
        mpfr_init(r8571);
        mpfr_init(r8572);
        mpfr_init(r8573);
        mpfr_init_set_str(r8574, "2", 10, MPFR_RNDN);
        mpfr_init(r8575);
        mpfr_init(r8576);
        mpfr_init_set_str(r8577, "3.128421125733265e+92", 10, MPFR_RNDN);
        mpfr_init(r8578);
        mpfr_init(r8579);
        mpfr_init(r8580);
        mpfr_init(r8581);
        mpfr_init(r8582);
        mpfr_init(r8583);
        mpfr_init(r8584);
        mpfr_init(r8585);
        mpfr_init(r8586);
        mpfr_init(r8587);
        mpfr_init(r8588);
        mpfr_init(r8589);
}

double f_dm(double a, double b, double c) {
        mpfr_set_d(r8556, b, MPFR_RNDN);
        ;
        mpfr_set_si(r8558, mpfr_cmp(r8556, r8557) <= 0, MPFR_RNDN);
        mpfr_set_d(r8559, c, MPFR_RNDN);
        mpfr_div(r8560, r8559, r8556, MPFR_RNDN);
        mpfr_set_d(r8561, a, MPFR_RNDN);
        mpfr_div(r8562, r8556, r8561, MPFR_RNDN);
        mpfr_sub(r8563, r8560, r8562, MPFR_RNDN);
        ;
        mpfr_set_si(r8565, mpfr_cmp(r8556, r8564) <= 0, MPFR_RNDN);
        mpfr_mul(r8566, r8556, r8556, MPFR_RNDN);
        ;
        mpfr_mul(r8568, r8567, r8561, MPFR_RNDN);
        mpfr_mul(r8569, r8568, r8559, MPFR_RNDN);
        mpfr_sub(r8570, r8566, r8569, MPFR_RNDN);
        mpfr_sqrt(r8571, r8570, MPFR_RNDN);
        mpfr_neg(r8572, r8556, MPFR_RNDN);
        mpfr_add(r8573, r8571, r8572, MPFR_RNDN);
        ;
        mpfr_mul(r8575, r8574, r8561, MPFR_RNDN);
        mpfr_div(r8576, r8573, r8575, MPFR_RNDN);
        ;
        mpfr_set_si(r8578, mpfr_cmp(r8556, r8577) <= 0, MPFR_RNDN);
        mpfr_neg(r8579, r8559, MPFR_RNDN);
        mpfr_mul(r8580, r8568, r8579, MPFR_RNDN);
        mpfr_fma(r8581, r8568, r8579, r8566, MPFR_RNDN);
        mpfr_sqrt(r8582, r8581, MPFR_RNDN);
        mpfr_add(r8583, r8556, r8582, MPFR_RNDN);
        mpfr_div(r8584, r8580, r8583, MPFR_RNDN);
        mpfr_div(r8585, r8584, r8575, MPFR_RNDN);
        mpfr_neg(r8586, r8560, MPFR_RNDN);
        if (mpfr_get_si(r8578, MPFR_RNDN)) { mpfr_set(r8587, r8585, MPFR_RNDN); } else { mpfr_set(r8587, r8586, MPFR_RNDN); };
        if (mpfr_get_si(r8565, MPFR_RNDN)) { mpfr_set(r8588, r8576, MPFR_RNDN); } else { mpfr_set(r8588, r8587, MPFR_RNDN); };
        if (mpfr_get_si(r8558, MPFR_RNDN)) { mpfr_set(r8589, r8563, MPFR_RNDN); } else { mpfr_set(r8589, r8588, MPFR_RNDN); };
        return mpfr_get_d(r8589, MPFR_RNDN);
}

