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

char *name = "quad2p (problem 3.2.1, positive)";

double f_if(float a, float b_2F2, float c) {
        float r4415394 = b_2F2;
        float r4415395 = -r4415394;
        float r4415396 = r4415394 * r4415394;
        float r4415397 = a;
        float r4415398 = c;
        float r4415399 = r4415397 * r4415398;
        float r4415400 = r4415396 - r4415399;
        float r4415401 = sqrt(r4415400);
        float r4415402 = r4415395 + r4415401;
        float r4415403 = r4415402 / r4415397;
        return r4415403;
}

double f_id(double a, double b_2F2, double c) {
        double r4415404 = b_2F2;
        double r4415405 = -r4415404;
        double r4415406 = r4415404 * r4415404;
        double r4415407 = a;
        double r4415408 = c;
        double r4415409 = r4415407 * r4415408;
        double r4415410 = r4415406 - r4415409;
        double r4415411 = sqrt(r4415410);
        double r4415412 = r4415405 + r4415411;
        double r4415413 = r4415412 / r4415407;
        return r4415413;
}


double f_of(float a, float b_2F2, float c) {
        float r4415414 = b_2F2;
        float r4415415 = -5.190855692504989e+126;
        bool r4415416 = r4415414 <= r4415415;
        float r4415417 = -2;
        float r4415418 = a;
        float r4415419 = r4415414 / r4415418;
        float r4415420 = r4415417 * r4415419;
        float r4415421 = 9.165338891167788e-118;
        bool r4415422 = r4415414 <= r4415421;
        float r4415423 = 1;
        float r4415424 = -r4415414;
        float r4415425 = r4415414 * r4415414;
        float r4415426 = c;
        float r4415427 = r4415418 * r4415426;
        float r4415428 = r4415425 - r4415427;
        float r4415429 = sqrt(r4415428);
        float r4415430 = r4415424 + r4415429;
        float r4415431 = r4415418 / r4415430;
        float r4415432 = r4415423 / r4415431;
        float r4415433 = r4415424 - r4415414;
        float r4415434 = 1/2;
        float r4415435 = r4415434 * r4415426;
        float r4415436 = r4415435 / r4415419;
        float r4415437 = r4415433 + r4415436;
        float r4415438 = r4415426 / r4415437;
        float r4415439 = r4415422 ? r4415432 : r4415438;
        float r4415440 = r4415416 ? r4415420 : r4415439;
        return r4415440;
}

double f_od(double a, double b_2F2, double c) {
        double r4415441 = b_2F2;
        double r4415442 = -5.190855692504989e+126;
        bool r4415443 = r4415441 <= r4415442;
        double r4415444 = -2;
        double r4415445 = a;
        double r4415446 = r4415441 / r4415445;
        double r4415447 = r4415444 * r4415446;
        double r4415448 = 9.165338891167788e-118;
        bool r4415449 = r4415441 <= r4415448;
        double r4415450 = 1;
        double r4415451 = -r4415441;
        double r4415452 = r4415441 * r4415441;
        double r4415453 = c;
        double r4415454 = r4415445 * r4415453;
        double r4415455 = r4415452 - r4415454;
        double r4415456 = sqrt(r4415455);
        double r4415457 = r4415451 + r4415456;
        double r4415458 = r4415445 / r4415457;
        double r4415459 = r4415450 / r4415458;
        double r4415460 = r4415451 - r4415441;
        double r4415461 = 1/2;
        double r4415462 = r4415461 * r4415453;
        double r4415463 = r4415462 / r4415446;
        double r4415464 = r4415460 + r4415463;
        double r4415465 = r4415453 / r4415464;
        double r4415466 = r4415449 ? r4415459 : r4415465;
        double r4415467 = r4415443 ? r4415447 : r4415466;
        return r4415467;
}

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 r4415468, r4415469, r4415470, r4415471, r4415472, r4415473, r4415474, r4415475, r4415476, r4415477;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4415468);
        mpfr_init(r4415469);
        mpfr_init(r4415470);
        mpfr_init(r4415471);
        mpfr_init(r4415472);
        mpfr_init(r4415473);
        mpfr_init(r4415474);
        mpfr_init(r4415475);
        mpfr_init(r4415476);
        mpfr_init(r4415477);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r4415468, b_2F2, MPFR_RNDN);
        mpfr_neg(r4415469, r4415468, MPFR_RNDN);
        mpfr_mul(r4415470, r4415468, r4415468, MPFR_RNDN);
        mpfr_set_d(r4415471, a, MPFR_RNDN);
        mpfr_set_d(r4415472, c, MPFR_RNDN);
        mpfr_mul(r4415473, r4415471, r4415472, MPFR_RNDN);
        mpfr_sub(r4415474, r4415470, r4415473, MPFR_RNDN);
        mpfr_sqrt(r4415475, r4415474, MPFR_RNDN);
        mpfr_add(r4415476, r4415469, r4415475, MPFR_RNDN);
        mpfr_div(r4415477, r4415476, r4415471, MPFR_RNDN);
        return mpfr_get_d(r4415477, MPFR_RNDN);
}

static mpfr_t r4415478, r4415479, r4415480, r4415481, r4415482, r4415483, r4415484, r4415485, r4415486, r4415487, r4415488, r4415489, r4415490, r4415491, r4415492, r4415493, r4415494, r4415495, r4415496, r4415497, r4415498, r4415499, r4415500, r4415501, r4415502, r4415503, r4415504;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4415478);
        mpfr_init_set_str(r4415479, "-5.190855692504989e+126", 10, MPFR_RNDN);
        mpfr_init(r4415480);
        mpfr_init_set_str(r4415481, "-2", 10, MPFR_RNDN);
        mpfr_init(r4415482);
        mpfr_init(r4415483);
        mpfr_init(r4415484);
        mpfr_init_set_str(r4415485, "9.165338891167788e-118", 10, MPFR_RNDN);
        mpfr_init(r4415486);
        mpfr_init_set_str(r4415487, "1", 10, MPFR_RNDN);
        mpfr_init(r4415488);
        mpfr_init(r4415489);
        mpfr_init(r4415490);
        mpfr_init(r4415491);
        mpfr_init(r4415492);
        mpfr_init(r4415493);
        mpfr_init(r4415494);
        mpfr_init(r4415495);
        mpfr_init(r4415496);
        mpfr_init(r4415497);
        mpfr_init_set_str(r4415498, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4415499);
        mpfr_init(r4415500);
        mpfr_init(r4415501);
        mpfr_init(r4415502);
        mpfr_init(r4415503);
        mpfr_init(r4415504);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r4415478, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4415480, mpfr_cmp(r4415478, r4415479) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r4415482, a, MPFR_RNDN);
        mpfr_div(r4415483, r4415478, r4415482, MPFR_RNDN);
        mpfr_mul(r4415484, r4415481, r4415483, MPFR_RNDN);
        ;
        mpfr_set_si(r4415486, mpfr_cmp(r4415478, r4415485) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r4415488, r4415478, MPFR_RNDN);
        mpfr_mul(r4415489, r4415478, r4415478, MPFR_RNDN);
        mpfr_set_d(r4415490, c, MPFR_RNDN);
        mpfr_mul(r4415491, r4415482, r4415490, MPFR_RNDN);
        mpfr_sub(r4415492, r4415489, r4415491, MPFR_RNDN);
        mpfr_sqrt(r4415493, r4415492, MPFR_RNDN);
        mpfr_add(r4415494, r4415488, r4415493, MPFR_RNDN);
        mpfr_div(r4415495, r4415482, r4415494, MPFR_RNDN);
        mpfr_div(r4415496, r4415487, r4415495, MPFR_RNDN);
        mpfr_sub(r4415497, r4415488, r4415478, MPFR_RNDN);
        ;
        mpfr_mul(r4415499, r4415498, r4415490, MPFR_RNDN);
        mpfr_div(r4415500, r4415499, r4415483, MPFR_RNDN);
        mpfr_add(r4415501, r4415497, r4415500, MPFR_RNDN);
        mpfr_div(r4415502, r4415490, r4415501, MPFR_RNDN);
        if (mpfr_get_si(r4415486, MPFR_RNDN)) { mpfr_set(r4415503, r4415496, MPFR_RNDN); } else { mpfr_set(r4415503, r4415502, MPFR_RNDN); };
        if (mpfr_get_si(r4415480, MPFR_RNDN)) { mpfr_set(r4415504, r4415484, MPFR_RNDN); } else { mpfr_set(r4415504, r4415503, MPFR_RNDN); };
        return mpfr_get_d(r4415504, MPFR_RNDN);
}

static mpfr_t r4415505, r4415506, r4415507, r4415508, r4415509, r4415510, r4415511, r4415512, r4415513, r4415514, r4415515, r4415516, r4415517, r4415518, r4415519, r4415520, r4415521, r4415522, r4415523, r4415524, r4415525, r4415526, r4415527, r4415528, r4415529, r4415530, r4415531;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4415505);
        mpfr_init_set_str(r4415506, "-5.190855692504989e+126", 10, MPFR_RNDN);
        mpfr_init(r4415507);
        mpfr_init_set_str(r4415508, "-2", 10, MPFR_RNDN);
        mpfr_init(r4415509);
        mpfr_init(r4415510);
        mpfr_init(r4415511);
        mpfr_init_set_str(r4415512, "9.165338891167788e-118", 10, MPFR_RNDN);
        mpfr_init(r4415513);
        mpfr_init_set_str(r4415514, "1", 10, MPFR_RNDN);
        mpfr_init(r4415515);
        mpfr_init(r4415516);
        mpfr_init(r4415517);
        mpfr_init(r4415518);
        mpfr_init(r4415519);
        mpfr_init(r4415520);
        mpfr_init(r4415521);
        mpfr_init(r4415522);
        mpfr_init(r4415523);
        mpfr_init(r4415524);
        mpfr_init_set_str(r4415525, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4415526);
        mpfr_init(r4415527);
        mpfr_init(r4415528);
        mpfr_init(r4415529);
        mpfr_init(r4415530);
        mpfr_init(r4415531);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r4415505, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r4415507, mpfr_cmp(r4415505, r4415506) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r4415509, a, MPFR_RNDN);
        mpfr_div(r4415510, r4415505, r4415509, MPFR_RNDN);
        mpfr_mul(r4415511, r4415508, r4415510, MPFR_RNDN);
        ;
        mpfr_set_si(r4415513, mpfr_cmp(r4415505, r4415512) <= 0, MPFR_RNDN);
        ;
        mpfr_neg(r4415515, r4415505, MPFR_RNDN);
        mpfr_mul(r4415516, r4415505, r4415505, MPFR_RNDN);
        mpfr_set_d(r4415517, c, MPFR_RNDN);
        mpfr_mul(r4415518, r4415509, r4415517, MPFR_RNDN);
        mpfr_sub(r4415519, r4415516, r4415518, MPFR_RNDN);
        mpfr_sqrt(r4415520, r4415519, MPFR_RNDN);
        mpfr_add(r4415521, r4415515, r4415520, MPFR_RNDN);
        mpfr_div(r4415522, r4415509, r4415521, MPFR_RNDN);
        mpfr_div(r4415523, r4415514, r4415522, MPFR_RNDN);
        mpfr_sub(r4415524, r4415515, r4415505, MPFR_RNDN);
        ;
        mpfr_mul(r4415526, r4415525, r4415517, MPFR_RNDN);
        mpfr_div(r4415527, r4415526, r4415510, MPFR_RNDN);
        mpfr_add(r4415528, r4415524, r4415527, MPFR_RNDN);
        mpfr_div(r4415529, r4415517, r4415528, MPFR_RNDN);
        if (mpfr_get_si(r4415513, MPFR_RNDN)) { mpfr_set(r4415530, r4415523, MPFR_RNDN); } else { mpfr_set(r4415530, r4415529, MPFR_RNDN); };
        if (mpfr_get_si(r4415507, MPFR_RNDN)) { mpfr_set(r4415531, r4415511, MPFR_RNDN); } else { mpfr_set(r4415531, r4415530, MPFR_RNDN); };
        return mpfr_get_d(r4415531, MPFR_RNDN);
}

