#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 r18521 = b_2F2;
        float r18522 = -r18521;
        float r18523 = r18521 * r18521;
        float r18524 = a;
        float r18525 = c;
        float r18526 = r18524 * r18525;
        float r18527 = r18523 - r18526;
        float r18528 = sqrt(r18527);
        float r18529 = r18522 + r18528;
        float r18530 = r18529 / r18524;
        return r18530;
}

double f_id(double a, double b_2F2, double c) {
        double r18531 = b_2F2;
        double r18532 = -r18531;
        double r18533 = r18531 * r18531;
        double r18534 = a;
        double r18535 = c;
        double r18536 = r18534 * r18535;
        double r18537 = r18533 - r18536;
        double r18538 = sqrt(r18537);
        double r18539 = r18532 + r18538;
        double r18540 = r18539 / r18534;
        return r18540;
}


double f_of(float a, float b_2F2, float c) {
        float r18541 = b_2F2;
        float r18542 = -8.631899346984487e+78f;
        bool r18543 = r18541 <= r18542;
        float r18544 = -2.0f;
        float r18545 = a;
        float r18546 = r18541 / r18545;
        float r18547 = r18544 * r18546;
        float r18548 = 1.9124546476349704e-134f;
        bool r18549 = r18541 <= r18548;
        float r18550 = -r18541;
        float r18551 = r18541 * r18541;
        float r18552 = c;
        float r18553 = r18545 * r18552;
        float r18554 = r18551 - r18553;
        float r18555 = sqrt(r18554);
        float r18556 = r18550 + r18555;
        float r18557 = r18556 / r18545;
        float r18558 = 712713953.8918697f;
        bool r18559 = r18541 <= r18558;
        float r18560 = 1.0f;
        float r18561 = r18552 * r18545;
        float r18562 = r18545 / r18561;
        float r18563 = r18550 - r18555;
        float r18564 = r18562 * r18563;
        float r18565 = r18560 / r18564;
        float r18566 = r18552 / r18541;
        float r18567 = -0.5f;
        float r18568 = r18566 * r18567;
        float r18569 = r18559 ? r18565 : r18568;
        float r18570 = r18549 ? r18557 : r18569;
        float r18571 = r18543 ? r18547 : r18570;
        return r18571;
}

double f_od(double a, double b_2F2, double c) {
        double r18572 = b_2F2;
        double r18573 = -8.631899346984487e+78;
        bool r18574 = r18572 <= r18573;
        double r18575 = -2.0;
        double r18576 = a;
        double r18577 = r18572 / r18576;
        double r18578 = r18575 * r18577;
        double r18579 = 1.9124546476349704e-134;
        bool r18580 = r18572 <= r18579;
        double r18581 = -r18572;
        double r18582 = r18572 * r18572;
        double r18583 = c;
        double r18584 = r18576 * r18583;
        double r18585 = r18582 - r18584;
        double r18586 = sqrt(r18585);
        double r18587 = r18581 + r18586;
        double r18588 = r18587 / r18576;
        double r18589 = 712713953.8918697;
        bool r18590 = r18572 <= r18589;
        double r18591 = 1.0;
        double r18592 = r18583 * r18576;
        double r18593 = r18576 / r18592;
        double r18594 = r18581 - r18586;
        double r18595 = r18593 * r18594;
        double r18596 = r18591 / r18595;
        double r18597 = r18583 / r18572;
        double r18598 = -0.5;
        double r18599 = r18597 * r18598;
        double r18600 = r18590 ? r18596 : r18599;
        double r18601 = r18580 ? r18588 : r18600;
        double r18602 = r18574 ? r18578 : r18601;
        return r18602;
}

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 r18603, r18604, r18605, r18606, r18607, r18608, r18609, r18610, r18611, r18612;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2960);
        mpfr_init(r18603);
        mpfr_init(r18604);
        mpfr_init(r18605);
        mpfr_init(r18606);
        mpfr_init(r18607);
        mpfr_init(r18608);
        mpfr_init(r18609);
        mpfr_init(r18610);
        mpfr_init(r18611);
        mpfr_init(r18612);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r18603, b_2F2, MPFR_RNDN);
        mpfr_neg(r18604, r18603, MPFR_RNDN);
        mpfr_sqr(r18605, r18603, MPFR_RNDN);
        mpfr_set_d(r18606, a, MPFR_RNDN);
        mpfr_set_d(r18607, c, MPFR_RNDN);
        mpfr_mul(r18608, r18606, r18607, MPFR_RNDN);
        mpfr_sub(r18609, r18605, r18608, MPFR_RNDN);
        mpfr_sqrt(r18610, r18609, MPFR_RNDN);
        mpfr_add(r18611, r18604, r18610, MPFR_RNDN);
        mpfr_div(r18612, r18611, r18606, MPFR_RNDN);
        return mpfr_get_d(r18612, MPFR_RNDN);
}

static mpfr_t r18613, r18614, r18615, r18616, r18617, r18618, r18619, r18620, r18621, r18622, r18623, r18624, r18625, r18626, r18627, r18628, r18629, r18630, r18631, r18632, r18633, r18634, r18635, r18636, r18637, r18638, r18639, r18640, r18641, r18642, r18643;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r18613);
        mpfr_init_set_str(r18614, "-8.631899346984487e+78", 10, MPFR_RNDN);
        mpfr_init(r18615);
        mpfr_init_set_str(r18616, "-2", 10, MPFR_RNDN);
        mpfr_init(r18617);
        mpfr_init(r18618);
        mpfr_init(r18619);
        mpfr_init_set_str(r18620, "1.9124546476349704e-134", 10, MPFR_RNDN);
        mpfr_init(r18621);
        mpfr_init(r18622);
        mpfr_init(r18623);
        mpfr_init(r18624);
        mpfr_init(r18625);
        mpfr_init(r18626);
        mpfr_init(r18627);
        mpfr_init(r18628);
        mpfr_init(r18629);
        mpfr_init_set_str(r18630, "712713953.8918697", 10, MPFR_RNDN);
        mpfr_init(r18631);
        mpfr_init_set_str(r18632, "1", 10, MPFR_RNDN);
        mpfr_init(r18633);
        mpfr_init(r18634);
        mpfr_init(r18635);
        mpfr_init(r18636);
        mpfr_init(r18637);
        mpfr_init(r18638);
        mpfr_init_set_str(r18639, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r18640);
        mpfr_init(r18641);
        mpfr_init(r18642);
        mpfr_init(r18643);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r18613, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r18615, mpfr_cmp(r18613, r18614) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r18617, a, MPFR_RNDN);
        mpfr_div(r18618, r18613, r18617, MPFR_RNDN);
        mpfr_mul(r18619, r18616, r18618, MPFR_RNDN);
        ;
        mpfr_set_si(r18621, mpfr_cmp(r18613, r18620) <= 0, MPFR_RNDN);
        mpfr_neg(r18622, r18613, MPFR_RNDN);
        mpfr_sqr(r18623, r18613, MPFR_RNDN);
        mpfr_set_d(r18624, c, MPFR_RNDN);
        mpfr_mul(r18625, r18617, r18624, MPFR_RNDN);
        mpfr_sub(r18626, r18623, r18625, MPFR_RNDN);
        mpfr_sqrt(r18627, r18626, MPFR_RNDN);
        mpfr_add(r18628, r18622, r18627, MPFR_RNDN);
        mpfr_div(r18629, r18628, r18617, MPFR_RNDN);
        ;
        mpfr_set_si(r18631, mpfr_cmp(r18613, r18630) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r18633, r18624, r18617, MPFR_RNDN);
        mpfr_div(r18634, r18617, r18633, MPFR_RNDN);
        mpfr_sub(r18635, r18622, r18627, MPFR_RNDN);
        mpfr_mul(r18636, r18634, r18635, MPFR_RNDN);
        mpfr_div(r18637, r18632, r18636, MPFR_RNDN);
        mpfr_div(r18638, r18624, r18613, MPFR_RNDN);
        ;
        mpfr_mul(r18640, r18638, r18639, MPFR_RNDN);
        if (mpfr_get_si(r18631, MPFR_RNDN)) { mpfr_set(r18641, r18637, MPFR_RNDN); } else { mpfr_set(r18641, r18640, MPFR_RNDN); };
        if (mpfr_get_si(r18621, MPFR_RNDN)) { mpfr_set(r18642, r18629, MPFR_RNDN); } else { mpfr_set(r18642, r18641, MPFR_RNDN); };
        if (mpfr_get_si(r18615, MPFR_RNDN)) { mpfr_set(r18643, r18619, MPFR_RNDN); } else { mpfr_set(r18643, r18642, MPFR_RNDN); };
        return mpfr_get_d(r18643, MPFR_RNDN);
}

static mpfr_t r18644, r18645, r18646, r18647, r18648, r18649, r18650, r18651, r18652, r18653, r18654, r18655, r18656, r18657, r18658, r18659, r18660, r18661, r18662, r18663, r18664, r18665, r18666, r18667, r18668, r18669, r18670, r18671, r18672, r18673, r18674;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2960);
        mpfr_init(r18644);
        mpfr_init_set_str(r18645, "-8.631899346984487e+78", 10, MPFR_RNDN);
        mpfr_init(r18646);
        mpfr_init_set_str(r18647, "-2", 10, MPFR_RNDN);
        mpfr_init(r18648);
        mpfr_init(r18649);
        mpfr_init(r18650);
        mpfr_init_set_str(r18651, "1.9124546476349704e-134", 10, MPFR_RNDN);
        mpfr_init(r18652);
        mpfr_init(r18653);
        mpfr_init(r18654);
        mpfr_init(r18655);
        mpfr_init(r18656);
        mpfr_init(r18657);
        mpfr_init(r18658);
        mpfr_init(r18659);
        mpfr_init(r18660);
        mpfr_init_set_str(r18661, "712713953.8918697", 10, MPFR_RNDN);
        mpfr_init(r18662);
        mpfr_init_set_str(r18663, "1", 10, MPFR_RNDN);
        mpfr_init(r18664);
        mpfr_init(r18665);
        mpfr_init(r18666);
        mpfr_init(r18667);
        mpfr_init(r18668);
        mpfr_init(r18669);
        mpfr_init_set_str(r18670, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r18671);
        mpfr_init(r18672);
        mpfr_init(r18673);
        mpfr_init(r18674);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r18644, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r18646, mpfr_cmp(r18644, r18645) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r18648, a, MPFR_RNDN);
        mpfr_div(r18649, r18644, r18648, MPFR_RNDN);
        mpfr_mul(r18650, r18647, r18649, MPFR_RNDN);
        ;
        mpfr_set_si(r18652, mpfr_cmp(r18644, r18651) <= 0, MPFR_RNDN);
        mpfr_neg(r18653, r18644, MPFR_RNDN);
        mpfr_sqr(r18654, r18644, MPFR_RNDN);
        mpfr_set_d(r18655, c, MPFR_RNDN);
        mpfr_mul(r18656, r18648, r18655, MPFR_RNDN);
        mpfr_sub(r18657, r18654, r18656, MPFR_RNDN);
        mpfr_sqrt(r18658, r18657, MPFR_RNDN);
        mpfr_add(r18659, r18653, r18658, MPFR_RNDN);
        mpfr_div(r18660, r18659, r18648, MPFR_RNDN);
        ;
        mpfr_set_si(r18662, mpfr_cmp(r18644, r18661) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r18664, r18655, r18648, MPFR_RNDN);
        mpfr_div(r18665, r18648, r18664, MPFR_RNDN);
        mpfr_sub(r18666, r18653, r18658, MPFR_RNDN);
        mpfr_mul(r18667, r18665, r18666, MPFR_RNDN);
        mpfr_div(r18668, r18663, r18667, MPFR_RNDN);
        mpfr_div(r18669, r18655, r18644, MPFR_RNDN);
        ;
        mpfr_mul(r18671, r18669, r18670, MPFR_RNDN);
        if (mpfr_get_si(r18662, MPFR_RNDN)) { mpfr_set(r18672, r18668, MPFR_RNDN); } else { mpfr_set(r18672, r18671, MPFR_RNDN); };
        if (mpfr_get_si(r18652, MPFR_RNDN)) { mpfr_set(r18673, r18660, MPFR_RNDN); } else { mpfr_set(r18673, r18672, MPFR_RNDN); };
        if (mpfr_get_si(r18646, MPFR_RNDN)) { mpfr_set(r18674, r18650, MPFR_RNDN); } else { mpfr_set(r18674, r18673, MPFR_RNDN); };
        return mpfr_get_d(r18674, MPFR_RNDN);
}

