#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_2, float c) {
        float r7607 = b_2;
        float r7608 = -r7607;
        float r7609 = r7607 * r7607;
        float r7610 = a;
        float r7611 = c;
        float r7612 = r7610 * r7611;
        float r7613 = r7609 - r7612;
        float r7614 = sqrt(r7613);
        float r7615 = r7608 + r7614;
        float r7616 = r7615 / r7610;
        return r7616;
}

double f_id(double a, double b_2, double c) {
        double r7617 = b_2;
        double r7618 = -r7617;
        double r7619 = r7617 * r7617;
        double r7620 = a;
        double r7621 = c;
        double r7622 = r7620 * r7621;
        double r7623 = r7619 - r7622;
        double r7624 = sqrt(r7623);
        double r7625 = r7618 + r7624;
        double r7626 = r7625 / r7620;
        return r7626;
}


double f_of(float a, float b_2, float c) {
        float r7627 = b_2;
        float r7628 = -1.338815475246526e+154f;
        bool r7629 = r7627 <= r7628;
        float r7630 = -2.0f;
        float r7631 = a;
        float r7632 = r7627 / r7631;
        float r7633 = r7630 * r7632;
        float r7634 = 1.4057559798961052e-72f;
        bool r7635 = r7627 <= r7634;
        float r7636 = r7627 * r7627;
        float r7637 = c;
        float r7638 = r7637 * r7631;
        float r7639 = r7636 - r7638;
        float r7640 = sqrt(r7639);
        float r7641 = -r7627;
        float r7642 = r7640 + r7641;
        float r7643 = r7642 / r7631;
        float r7644 = 1.0f;
        float r7645 = r7627 / r7637;
        float r7646 = r7630 * r7645;
        float r7647 = r7644 / r7646;
        float r7648 = r7635 ? r7643 : r7647;
        float r7649 = r7629 ? r7633 : r7648;
        return r7649;
}

double f_od(double a, double b_2, double c) {
        double r7650 = b_2;
        double r7651 = -1.338815475246526e+154;
        bool r7652 = r7650 <= r7651;
        double r7653 = -2.0;
        double r7654 = a;
        double r7655 = r7650 / r7654;
        double r7656 = r7653 * r7655;
        double r7657 = 1.4057559798961052e-72;
        bool r7658 = r7650 <= r7657;
        double r7659 = r7650 * r7650;
        double r7660 = c;
        double r7661 = r7660 * r7654;
        double r7662 = r7659 - r7661;
        double r7663 = sqrt(r7662);
        double r7664 = -r7650;
        double r7665 = r7663 + r7664;
        double r7666 = r7665 / r7654;
        double r7667 = 1.0;
        double r7668 = r7650 / r7660;
        double r7669 = r7653 * r7668;
        double r7670 = r7667 / r7669;
        double r7671 = r7658 ? r7666 : r7670;
        double r7672 = r7652 ? r7656 : r7671;
        return r7672;
}

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 r7673, r7674, r7675, r7676, r7677, r7678, r7679, r7680, r7681, r7682;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3152);
        mpfr_init(r7673);
        mpfr_init(r7674);
        mpfr_init(r7675);
        mpfr_init(r7676);
        mpfr_init(r7677);
        mpfr_init(r7678);
        mpfr_init(r7679);
        mpfr_init(r7680);
        mpfr_init(r7681);
        mpfr_init(r7682);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r7673, b_2, MPFR_RNDN);
        mpfr_neg(r7674, r7673, MPFR_RNDN);
        mpfr_mul(r7675, r7673, r7673, MPFR_RNDN);
        mpfr_set_d(r7676, a, MPFR_RNDN);
        mpfr_set_d(r7677, c, MPFR_RNDN);
        mpfr_mul(r7678, r7676, r7677, MPFR_RNDN);
        mpfr_sub(r7679, r7675, r7678, MPFR_RNDN);
        mpfr_sqrt(r7680, r7679, MPFR_RNDN);
        mpfr_add(r7681, r7674, r7680, MPFR_RNDN);
        mpfr_div(r7682, r7681, r7676, MPFR_RNDN);
        return mpfr_get_d(r7682, MPFR_RNDN);
}

static mpfr_t r7683, r7684, r7685, r7686, r7687, r7688, r7689, r7690, r7691, r7692, r7693, r7694, r7695, r7696, r7697, r7698, r7699, r7700, r7701, r7702, r7703, r7704, r7705;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3152);
        mpfr_init(r7683);
        mpfr_init_set_str(r7684, "-1.338815475246526e+154", 10, MPFR_RNDN);
        mpfr_init(r7685);
        mpfr_init_set_str(r7686, "-2", 10, MPFR_RNDN);
        mpfr_init(r7687);
        mpfr_init(r7688);
        mpfr_init(r7689);
        mpfr_init_set_str(r7690, "1.4057559798961052e-72", 10, MPFR_RNDN);
        mpfr_init(r7691);
        mpfr_init(r7692);
        mpfr_init(r7693);
        mpfr_init(r7694);
        mpfr_init(r7695);
        mpfr_init(r7696);
        mpfr_init(r7697);
        mpfr_init(r7698);
        mpfr_init(r7699);
        mpfr_init_set_str(r7700, "1", 10, MPFR_RNDN);
        mpfr_init(r7701);
        mpfr_init(r7702);
        mpfr_init(r7703);
        mpfr_init(r7704);
        mpfr_init(r7705);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r7683, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r7685, mpfr_cmp(r7683, r7684) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r7687, a, MPFR_RNDN);
        mpfr_div(r7688, r7683, r7687, MPFR_RNDN);
        mpfr_mul(r7689, r7686, r7688, MPFR_RNDN);
        ;
        mpfr_set_si(r7691, mpfr_cmp(r7683, r7690) <= 0, MPFR_RNDN);
        mpfr_mul(r7692, r7683, r7683, MPFR_RNDN);
        mpfr_set_d(r7693, c, MPFR_RNDN);
        mpfr_mul(r7694, r7693, r7687, MPFR_RNDN);
        mpfr_sub(r7695, r7692, r7694, MPFR_RNDN);
        mpfr_sqrt(r7696, r7695, MPFR_RNDN);
        mpfr_neg(r7697, r7683, MPFR_RNDN);
        mpfr_add(r7698, r7696, r7697, MPFR_RNDN);
        mpfr_div(r7699, r7698, r7687, MPFR_RNDN);
        ;
        mpfr_div(r7701, r7683, r7693, MPFR_RNDN);
        mpfr_mul(r7702, r7686, r7701, MPFR_RNDN);
        mpfr_div(r7703, r7700, r7702, MPFR_RNDN);
        if (mpfr_get_si(r7691, MPFR_RNDN)) { mpfr_set(r7704, r7699, MPFR_RNDN); } else { mpfr_set(r7704, r7703, MPFR_RNDN); };
        if (mpfr_get_si(r7685, MPFR_RNDN)) { mpfr_set(r7705, r7689, MPFR_RNDN); } else { mpfr_set(r7705, r7704, MPFR_RNDN); };
        return mpfr_get_d(r7705, MPFR_RNDN);
}

static mpfr_t r7706, r7707, r7708, r7709, r7710, r7711, r7712, r7713, r7714, r7715, r7716, r7717, r7718, r7719, r7720, r7721, r7722, r7723, r7724, r7725, r7726, r7727, r7728;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3152);
        mpfr_init(r7706);
        mpfr_init_set_str(r7707, "-1.338815475246526e+154", 10, MPFR_RNDN);
        mpfr_init(r7708);
        mpfr_init_set_str(r7709, "-2", 10, MPFR_RNDN);
        mpfr_init(r7710);
        mpfr_init(r7711);
        mpfr_init(r7712);
        mpfr_init_set_str(r7713, "1.4057559798961052e-72", 10, MPFR_RNDN);
        mpfr_init(r7714);
        mpfr_init(r7715);
        mpfr_init(r7716);
        mpfr_init(r7717);
        mpfr_init(r7718);
        mpfr_init(r7719);
        mpfr_init(r7720);
        mpfr_init(r7721);
        mpfr_init(r7722);
        mpfr_init_set_str(r7723, "1", 10, MPFR_RNDN);
        mpfr_init(r7724);
        mpfr_init(r7725);
        mpfr_init(r7726);
        mpfr_init(r7727);
        mpfr_init(r7728);
}

double f_dm(double a, double b_2, double c) {
        mpfr_set_d(r7706, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r7708, mpfr_cmp(r7706, r7707) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r7710, a, MPFR_RNDN);
        mpfr_div(r7711, r7706, r7710, MPFR_RNDN);
        mpfr_mul(r7712, r7709, r7711, MPFR_RNDN);
        ;
        mpfr_set_si(r7714, mpfr_cmp(r7706, r7713) <= 0, MPFR_RNDN);
        mpfr_mul(r7715, r7706, r7706, MPFR_RNDN);
        mpfr_set_d(r7716, c, MPFR_RNDN);
        mpfr_mul(r7717, r7716, r7710, MPFR_RNDN);
        mpfr_sub(r7718, r7715, r7717, MPFR_RNDN);
        mpfr_sqrt(r7719, r7718, MPFR_RNDN);
        mpfr_neg(r7720, r7706, MPFR_RNDN);
        mpfr_add(r7721, r7719, r7720, MPFR_RNDN);
        mpfr_div(r7722, r7721, r7710, MPFR_RNDN);
        ;
        mpfr_div(r7724, r7706, r7716, MPFR_RNDN);
        mpfr_mul(r7725, r7709, r7724, MPFR_RNDN);
        mpfr_div(r7726, r7723, r7725, MPFR_RNDN);
        if (mpfr_get_si(r7714, MPFR_RNDN)) { mpfr_set(r7727, r7722, MPFR_RNDN); } else { mpfr_set(r7727, r7726, MPFR_RNDN); };
        if (mpfr_get_si(r7708, MPFR_RNDN)) { mpfr_set(r7728, r7712, MPFR_RNDN); } else { mpfr_set(r7728, r7727, MPFR_RNDN); };
        return mpfr_get_d(r7728, MPFR_RNDN);
}

