#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 r18542 = b_2F2;
        float r18543 = -r18542;
        float r18544 = r18542 * r18542;
        float r18545 = a;
        float r18546 = c;
        float r18547 = r18545 * r18546;
        float r18548 = r18544 - r18547;
        float r18549 = sqrt(r18548);
        float r18550 = r18543 + r18549;
        float r18551 = r18550 / r18545;
        return r18551;
}

double f_id(double a, double b_2F2, double c) {
        double r18552 = b_2F2;
        double r18553 = -r18552;
        double r18554 = r18552 * r18552;
        double r18555 = a;
        double r18556 = c;
        double r18557 = r18555 * r18556;
        double r18558 = r18554 - r18557;
        double r18559 = sqrt(r18558);
        double r18560 = r18553 + r18559;
        double r18561 = r18560 / r18555;
        return r18561;
}


double f_of(float a, float b_2F2, float c) {
        float r18562 = b_2F2;
        float r18563 = -7.14895323289099e+145f;
        bool r18564 = r18562 <= r18563;
        float r18565 = -2.0f;
        float r18566 = a;
        float r18567 = r18562 / r18566;
        float r18568 = r18565 * r18567;
        float r18569 = 6.611638496230363e-143f;
        bool r18570 = r18562 <= r18569;
        float r18571 = -r18562;
        float r18572 = r18562 * r18562;
        float r18573 = c;
        float r18574 = r18566 * r18573;
        float r18575 = r18572 - r18574;
        float r18576 = sqrt(r18575);
        float r18577 = r18571 + r18576;
        float r18578 = r18577 / r18566;
        float r18579 = 2.353344202188118e-100f;
        bool r18580 = r18562 <= r18579;
        float r18581 = r18573 / r18562;
        float r18582 = -0.5f;
        float r18583 = r18581 * r18582;
        float r18584 = 4.3383085193935005e-09f;
        bool r18585 = r18562 <= r18584;
        float r18586 = r18585 ? r18578 : r18583;
        float r18587 = r18580 ? r18583 : r18586;
        float r18588 = r18570 ? r18578 : r18587;
        float r18589 = r18564 ? r18568 : r18588;
        return r18589;
}

double f_od(double a, double b_2F2, double c) {
        double r18590 = b_2F2;
        double r18591 = -7.14895323289099e+145;
        bool r18592 = r18590 <= r18591;
        double r18593 = -2.0;
        double r18594 = a;
        double r18595 = r18590 / r18594;
        double r18596 = r18593 * r18595;
        double r18597 = 6.611638496230363e-143;
        bool r18598 = r18590 <= r18597;
        double r18599 = -r18590;
        double r18600 = r18590 * r18590;
        double r18601 = c;
        double r18602 = r18594 * r18601;
        double r18603 = r18600 - r18602;
        double r18604 = sqrt(r18603);
        double r18605 = r18599 + r18604;
        double r18606 = r18605 / r18594;
        double r18607 = 2.353344202188118e-100;
        bool r18608 = r18590 <= r18607;
        double r18609 = r18601 / r18590;
        double r18610 = -0.5;
        double r18611 = r18609 * r18610;
        double r18612 = 4.3383085193935005e-09;
        bool r18613 = r18590 <= r18612;
        double r18614 = r18613 ? r18606 : r18611;
        double r18615 = r18608 ? r18611 : r18614;
        double r18616 = r18598 ? r18606 : r18615;
        double r18617 = r18592 ? r18596 : r18616;
        return r18617;
}

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 r18618, r18619, r18620, r18621, r18622, r18623, r18624, r18625, r18626, r18627;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r18618);
        mpfr_init(r18619);
        mpfr_init(r18620);
        mpfr_init(r18621);
        mpfr_init(r18622);
        mpfr_init(r18623);
        mpfr_init(r18624);
        mpfr_init(r18625);
        mpfr_init(r18626);
        mpfr_init(r18627);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r18618, b_2F2, MPFR_RNDN);
        mpfr_neg(r18619, r18618, MPFR_RNDN);
        mpfr_sqr(r18620, r18618, MPFR_RNDN);
        mpfr_set_d(r18621, a, MPFR_RNDN);
        mpfr_set_d(r18622, c, MPFR_RNDN);
        mpfr_mul(r18623, r18621, r18622, MPFR_RNDN);
        mpfr_sub(r18624, r18620, r18623, MPFR_RNDN);
        mpfr_sqrt(r18625, r18624, MPFR_RNDN);
        mpfr_add(r18626, r18619, r18625, MPFR_RNDN);
        mpfr_div(r18627, r18626, r18621, MPFR_RNDN);
        return mpfr_get_d(r18627, MPFR_RNDN);
}

static mpfr_t r18628, r18629, r18630, r18631, r18632, r18633, r18634, r18635, r18636, r18637, r18638, r18639, r18640, r18641, r18642, r18643, r18644, r18645, r18646, r18647, r18648, r18649, r18650, r18651, r18652, r18653, r18654, r18655;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r18628);
        mpfr_init_set_str(r18629, "-7.14895323289099e+145", 10, MPFR_RNDN);
        mpfr_init(r18630);
        mpfr_init_set_str(r18631, "-2", 10, MPFR_RNDN);
        mpfr_init(r18632);
        mpfr_init(r18633);
        mpfr_init(r18634);
        mpfr_init_set_str(r18635, "6.611638496230363e-143", 10, MPFR_RNDN);
        mpfr_init(r18636);
        mpfr_init(r18637);
        mpfr_init(r18638);
        mpfr_init(r18639);
        mpfr_init(r18640);
        mpfr_init(r18641);
        mpfr_init(r18642);
        mpfr_init(r18643);
        mpfr_init(r18644);
        mpfr_init_set_str(r18645, "2.353344202188118e-100", 10, MPFR_RNDN);
        mpfr_init(r18646);
        mpfr_init(r18647);
        mpfr_init_set_str(r18648, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r18649);
        mpfr_init_set_str(r18650, "4.3383085193935005e-09", 10, MPFR_RNDN);
        mpfr_init(r18651);
        mpfr_init(r18652);
        mpfr_init(r18653);
        mpfr_init(r18654);
        mpfr_init(r18655);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r18628, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r18630, mpfr_cmp(r18628, r18629) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r18632, a, MPFR_RNDN);
        mpfr_div(r18633, r18628, r18632, MPFR_RNDN);
        mpfr_mul(r18634, r18631, r18633, MPFR_RNDN);
        ;
        mpfr_set_si(r18636, mpfr_cmp(r18628, r18635) <= 0, MPFR_RNDN);
        mpfr_neg(r18637, r18628, MPFR_RNDN);
        mpfr_sqr(r18638, r18628, MPFR_RNDN);
        mpfr_set_d(r18639, c, MPFR_RNDN);
        mpfr_mul(r18640, r18632, r18639, MPFR_RNDN);
        mpfr_sub(r18641, r18638, r18640, MPFR_RNDN);
        mpfr_sqrt(r18642, r18641, MPFR_RNDN);
        mpfr_add(r18643, r18637, r18642, MPFR_RNDN);
        mpfr_div(r18644, r18643, r18632, MPFR_RNDN);
        ;
        mpfr_set_si(r18646, mpfr_cmp(r18628, r18645) <= 0, MPFR_RNDN);
        mpfr_div(r18647, r18639, r18628, MPFR_RNDN);
        ;
        mpfr_mul(r18649, r18647, r18648, MPFR_RNDN);
        ;
        mpfr_set_si(r18651, mpfr_cmp(r18628, r18650) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r18651, MPFR_RNDN)) { mpfr_set(r18652, r18644, MPFR_RNDN); } else { mpfr_set(r18652, r18649, MPFR_RNDN); };
        if (mpfr_get_si(r18646, MPFR_RNDN)) { mpfr_set(r18653, r18649, MPFR_RNDN); } else { mpfr_set(r18653, r18652, MPFR_RNDN); };
        if (mpfr_get_si(r18636, MPFR_RNDN)) { mpfr_set(r18654, r18644, MPFR_RNDN); } else { mpfr_set(r18654, r18653, MPFR_RNDN); };
        if (mpfr_get_si(r18630, MPFR_RNDN)) { mpfr_set(r18655, r18634, MPFR_RNDN); } else { mpfr_set(r18655, r18654, MPFR_RNDN); };
        return mpfr_get_d(r18655, MPFR_RNDN);
}

static mpfr_t r18656, r18657, r18658, r18659, r18660, r18661, r18662, r18663, r18664, r18665, r18666, r18667, r18668, r18669, r18670, r18671, r18672, r18673, r18674, r18675, r18676, r18677, r18678, r18679, r18680, r18681, r18682, r18683;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r18656);
        mpfr_init_set_str(r18657, "-7.14895323289099e+145", 10, MPFR_RNDN);
        mpfr_init(r18658);
        mpfr_init_set_str(r18659, "-2", 10, MPFR_RNDN);
        mpfr_init(r18660);
        mpfr_init(r18661);
        mpfr_init(r18662);
        mpfr_init_set_str(r18663, "6.611638496230363e-143", 10, MPFR_RNDN);
        mpfr_init(r18664);
        mpfr_init(r18665);
        mpfr_init(r18666);
        mpfr_init(r18667);
        mpfr_init(r18668);
        mpfr_init(r18669);
        mpfr_init(r18670);
        mpfr_init(r18671);
        mpfr_init(r18672);
        mpfr_init_set_str(r18673, "2.353344202188118e-100", 10, MPFR_RNDN);
        mpfr_init(r18674);
        mpfr_init(r18675);
        mpfr_init_set_str(r18676, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r18677);
        mpfr_init_set_str(r18678, "4.3383085193935005e-09", 10, MPFR_RNDN);
        mpfr_init(r18679);
        mpfr_init(r18680);
        mpfr_init(r18681);
        mpfr_init(r18682);
        mpfr_init(r18683);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r18656, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r18658, mpfr_cmp(r18656, r18657) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r18660, a, MPFR_RNDN);
        mpfr_div(r18661, r18656, r18660, MPFR_RNDN);
        mpfr_mul(r18662, r18659, r18661, MPFR_RNDN);
        ;
        mpfr_set_si(r18664, mpfr_cmp(r18656, r18663) <= 0, MPFR_RNDN);
        mpfr_neg(r18665, r18656, MPFR_RNDN);
        mpfr_sqr(r18666, r18656, MPFR_RNDN);
        mpfr_set_d(r18667, c, MPFR_RNDN);
        mpfr_mul(r18668, r18660, r18667, MPFR_RNDN);
        mpfr_sub(r18669, r18666, r18668, MPFR_RNDN);
        mpfr_sqrt(r18670, r18669, MPFR_RNDN);
        mpfr_add(r18671, r18665, r18670, MPFR_RNDN);
        mpfr_div(r18672, r18671, r18660, MPFR_RNDN);
        ;
        mpfr_set_si(r18674, mpfr_cmp(r18656, r18673) <= 0, MPFR_RNDN);
        mpfr_div(r18675, r18667, r18656, MPFR_RNDN);
        ;
        mpfr_mul(r18677, r18675, r18676, MPFR_RNDN);
        ;
        mpfr_set_si(r18679, mpfr_cmp(r18656, r18678) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r18679, MPFR_RNDN)) { mpfr_set(r18680, r18672, MPFR_RNDN); } else { mpfr_set(r18680, r18677, MPFR_RNDN); };
        if (mpfr_get_si(r18674, MPFR_RNDN)) { mpfr_set(r18681, r18677, MPFR_RNDN); } else { mpfr_set(r18681, r18680, MPFR_RNDN); };
        if (mpfr_get_si(r18664, MPFR_RNDN)) { mpfr_set(r18682, r18672, MPFR_RNDN); } else { mpfr_set(r18682, r18681, MPFR_RNDN); };
        if (mpfr_get_si(r18658, MPFR_RNDN)) { mpfr_set(r18683, r18662, MPFR_RNDN); } else { mpfr_set(r18683, r18682, MPFR_RNDN); };
        return mpfr_get_d(r18683, MPFR_RNDN);
}

