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

char *name = "NMSE problem 3.2.1";

double f_if(float a, float b_2F2, float c) {
        float r27624 = b_2F2;
        float r27625 = -r27624;
        float r27626 = r27624 * r27624;
        float r27627 = a;
        float r27628 = c;
        float r27629 = r27627 * r27628;
        float r27630 = r27626 - r27629;
        float r27631 = sqrt(r27630);
        float r27632 = r27625 - r27631;
        float r27633 = r27632 / r27627;
        return r27633;
}

double f_id(double a, double b_2F2, double c) {
        double r27634 = b_2F2;
        double r27635 = -r27634;
        double r27636 = r27634 * r27634;
        double r27637 = a;
        double r27638 = c;
        double r27639 = r27637 * r27638;
        double r27640 = r27636 - r27639;
        double r27641 = sqrt(r27640);
        double r27642 = r27635 - r27641;
        double r27643 = r27642 / r27637;
        return r27643;
}


double f_of(float a, float b_2F2, float c) {
        float r27644 = b_2F2;
        float r27645 = -5.018034098196628e+28;
        bool r27646 = r27644 <= r27645;
        float r27647 = c;
        float r27648 = r27647 / r27644;
        float r27649 = -1/2;
        float r27650 = r27648 * r27649;
        float r27651 = -3.546490195958238e-104;
        bool r27652 = r27644 <= r27651;
        float r27653 = a;
        float r27654 = r27647 * r27653;
        float r27655 = -r27644;
        float r27656 = r27644 * r27644;
        float r27657 = r27653 * r27647;
        float r27658 = r27656 - r27657;
        float r27659 = sqrt(r27658);
        float r27660 = r27655 + r27659;
        float r27661 = r27654 / r27660;
        float r27662 = r27661 / r27653;
        float r27663 = 1.7007616628281973e+81;
        bool r27664 = r27644 <= r27663;
        float r27665 = r27655 - r27659;
        float r27666 = r27665 / r27653;
        float r27667 = -2;
        float r27668 = r27644 / r27653;
        float r27669 = r27667 * r27668;
        float r27670 = r27664 ? r27666 : r27669;
        float r27671 = r27652 ? r27662 : r27670;
        float r27672 = r27646 ? r27650 : r27671;
        return r27672;
}

double f_od(double a, double b_2F2, double c) {
        double r27673 = b_2F2;
        double r27674 = -5.018034098196628e+28;
        bool r27675 = r27673 <= r27674;
        double r27676 = c;
        double r27677 = r27676 / r27673;
        double r27678 = -1/2;
        double r27679 = r27677 * r27678;
        double r27680 = -3.546490195958238e-104;
        bool r27681 = r27673 <= r27680;
        double r27682 = a;
        double r27683 = r27676 * r27682;
        double r27684 = -r27673;
        double r27685 = r27673 * r27673;
        double r27686 = r27682 * r27676;
        double r27687 = r27685 - r27686;
        double r27688 = sqrt(r27687);
        double r27689 = r27684 + r27688;
        double r27690 = r27683 / r27689;
        double r27691 = r27690 / r27682;
        double r27692 = 1.7007616628281973e+81;
        bool r27693 = r27673 <= r27692;
        double r27694 = r27684 - r27688;
        double r27695 = r27694 / r27682;
        double r27696 = -2;
        double r27697 = r27673 / r27682;
        double r27698 = r27696 * r27697;
        double r27699 = r27693 ? r27695 : r27698;
        double r27700 = r27681 ? r27691 : r27699;
        double r27701 = r27675 ? r27679 : r27700;
        return r27701;
}

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 r27702, r27703, r27704, r27705, r27706, r27707, r27708, r27709, r27710, r27711;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2704);
        mpfr_init(r27702);
        mpfr_init(r27703);
        mpfr_init(r27704);
        mpfr_init(r27705);
        mpfr_init(r27706);
        mpfr_init(r27707);
        mpfr_init(r27708);
        mpfr_init(r27709);
        mpfr_init(r27710);
        mpfr_init(r27711);
}

double f_im(double a, double b_2F2, double c) {
        mpfr_set_d(r27702, b_2F2, MPFR_RNDN);
        mpfr_neg(r27703, r27702, MPFR_RNDN);
        mpfr_mul(r27704, r27702, r27702, MPFR_RNDN);
        mpfr_set_d(r27705, a, MPFR_RNDN);
        mpfr_set_d(r27706, c, MPFR_RNDN);
        mpfr_mul(r27707, r27705, r27706, MPFR_RNDN);
        mpfr_sub(r27708, r27704, r27707, MPFR_RNDN);
        mpfr_sqrt(r27709, r27708, MPFR_RNDN);
        mpfr_sub(r27710, r27703, r27709, MPFR_RNDN);
        mpfr_div(r27711, r27710, r27705, MPFR_RNDN);
        return mpfr_get_d(r27711, MPFR_RNDN);
}

static mpfr_t r27712, r27713, r27714, r27715, r27716, r27717, r27718, r27719, r27720, r27721, r27722, r27723, r27724, r27725, r27726, r27727, r27728, r27729, r27730, r27731, r27732, r27733, r27734, r27735, r27736, r27737, r27738, r27739, r27740;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2704);
        mpfr_init(r27712);
        mpfr_init_set_str(r27713, "-5.018034098196628e+28", 10, MPFR_RNDN);
        mpfr_init(r27714);
        mpfr_init(r27715);
        mpfr_init(r27716);
        mpfr_init_set_str(r27717, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27718);
        mpfr_init_set_str(r27719, "-3.546490195958238e-104", 10, MPFR_RNDN);
        mpfr_init(r27720);
        mpfr_init(r27721);
        mpfr_init(r27722);
        mpfr_init(r27723);
        mpfr_init(r27724);
        mpfr_init(r27725);
        mpfr_init(r27726);
        mpfr_init(r27727);
        mpfr_init(r27728);
        mpfr_init(r27729);
        mpfr_init(r27730);
        mpfr_init_set_str(r27731, "1.7007616628281973e+81", 10, MPFR_RNDN);
        mpfr_init(r27732);
        mpfr_init(r27733);
        mpfr_init(r27734);
        mpfr_init_set_str(r27735, "-2", 10, MPFR_RNDN);
        mpfr_init(r27736);
        mpfr_init(r27737);
        mpfr_init(r27738);
        mpfr_init(r27739);
        mpfr_init(r27740);
}

double f_fm(double a, double b_2F2, double c) {
        mpfr_set_d(r27712, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27714, mpfr_cmp(r27712, r27713) <= 0, MPFR_RNDN);
        mpfr_set_d(r27715, c, MPFR_RNDN);
        mpfr_div(r27716, r27715, r27712, MPFR_RNDN);
        ;
        mpfr_mul(r27718, r27716, r27717, MPFR_RNDN);
        ;
        mpfr_set_si(r27720, mpfr_cmp(r27712, r27719) <= 0, MPFR_RNDN);
        mpfr_set_d(r27721, a, MPFR_RNDN);
        mpfr_mul(r27722, r27715, r27721, MPFR_RNDN);
        mpfr_neg(r27723, r27712, MPFR_RNDN);
        mpfr_mul(r27724, r27712, r27712, MPFR_RNDN);
        mpfr_mul(r27725, r27721, r27715, MPFR_RNDN);
        mpfr_sub(r27726, r27724, r27725, MPFR_RNDN);
        mpfr_sqrt(r27727, r27726, MPFR_RNDN);
        mpfr_add(r27728, r27723, r27727, MPFR_RNDN);
        mpfr_div(r27729, r27722, r27728, MPFR_RNDN);
        mpfr_div(r27730, r27729, r27721, MPFR_RNDN);
        ;
        mpfr_set_si(r27732, mpfr_cmp(r27712, r27731) <= 0, MPFR_RNDN);
        mpfr_sub(r27733, r27723, r27727, MPFR_RNDN);
        mpfr_div(r27734, r27733, r27721, MPFR_RNDN);
        ;
        mpfr_div(r27736, r27712, r27721, MPFR_RNDN);
        mpfr_mul(r27737, r27735, r27736, MPFR_RNDN);
        if (mpfr_get_si(r27732, MPFR_RNDN)) { mpfr_set(r27738, r27734, MPFR_RNDN); } else { mpfr_set(r27738, r27737, MPFR_RNDN); };
        if (mpfr_get_si(r27720, MPFR_RNDN)) { mpfr_set(r27739, r27730, MPFR_RNDN); } else { mpfr_set(r27739, r27738, MPFR_RNDN); };
        if (mpfr_get_si(r27714, MPFR_RNDN)) { mpfr_set(r27740, r27718, MPFR_RNDN); } else { mpfr_set(r27740, r27739, MPFR_RNDN); };
        return mpfr_get_d(r27740, MPFR_RNDN);
}

static mpfr_t r27741, r27742, r27743, r27744, r27745, r27746, r27747, r27748, r27749, r27750, r27751, r27752, r27753, r27754, r27755, r27756, r27757, r27758, r27759, r27760, r27761, r27762, r27763, r27764, r27765, r27766, r27767, r27768, r27769;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2704);
        mpfr_init(r27741);
        mpfr_init_set_str(r27742, "-5.018034098196628e+28", 10, MPFR_RNDN);
        mpfr_init(r27743);
        mpfr_init(r27744);
        mpfr_init(r27745);
        mpfr_init_set_str(r27746, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r27747);
        mpfr_init_set_str(r27748, "-3.546490195958238e-104", 10, MPFR_RNDN);
        mpfr_init(r27749);
        mpfr_init(r27750);
        mpfr_init(r27751);
        mpfr_init(r27752);
        mpfr_init(r27753);
        mpfr_init(r27754);
        mpfr_init(r27755);
        mpfr_init(r27756);
        mpfr_init(r27757);
        mpfr_init(r27758);
        mpfr_init(r27759);
        mpfr_init_set_str(r27760, "1.7007616628281973e+81", 10, MPFR_RNDN);
        mpfr_init(r27761);
        mpfr_init(r27762);
        mpfr_init(r27763);
        mpfr_init_set_str(r27764, "-2", 10, MPFR_RNDN);
        mpfr_init(r27765);
        mpfr_init(r27766);
        mpfr_init(r27767);
        mpfr_init(r27768);
        mpfr_init(r27769);
}

double f_dm(double a, double b_2F2, double c) {
        mpfr_set_d(r27741, b_2F2, MPFR_RNDN);
        ;
        mpfr_set_si(r27743, mpfr_cmp(r27741, r27742) <= 0, MPFR_RNDN);
        mpfr_set_d(r27744, c, MPFR_RNDN);
        mpfr_div(r27745, r27744, r27741, MPFR_RNDN);
        ;
        mpfr_mul(r27747, r27745, r27746, MPFR_RNDN);
        ;
        mpfr_set_si(r27749, mpfr_cmp(r27741, r27748) <= 0, MPFR_RNDN);
        mpfr_set_d(r27750, a, MPFR_RNDN);
        mpfr_mul(r27751, r27744, r27750, MPFR_RNDN);
        mpfr_neg(r27752, r27741, MPFR_RNDN);
        mpfr_mul(r27753, r27741, r27741, MPFR_RNDN);
        mpfr_mul(r27754, r27750, r27744, MPFR_RNDN);
        mpfr_sub(r27755, r27753, r27754, MPFR_RNDN);
        mpfr_sqrt(r27756, r27755, MPFR_RNDN);
        mpfr_add(r27757, r27752, r27756, MPFR_RNDN);
        mpfr_div(r27758, r27751, r27757, MPFR_RNDN);
        mpfr_div(r27759, r27758, r27750, MPFR_RNDN);
        ;
        mpfr_set_si(r27761, mpfr_cmp(r27741, r27760) <= 0, MPFR_RNDN);
        mpfr_sub(r27762, r27752, r27756, MPFR_RNDN);
        mpfr_div(r27763, r27762, r27750, MPFR_RNDN);
        ;
        mpfr_div(r27765, r27741, r27750, MPFR_RNDN);
        mpfr_mul(r27766, r27764, r27765, MPFR_RNDN);
        if (mpfr_get_si(r27761, MPFR_RNDN)) { mpfr_set(r27767, r27763, MPFR_RNDN); } else { mpfr_set(r27767, r27766, MPFR_RNDN); };
        if (mpfr_get_si(r27749, MPFR_RNDN)) { mpfr_set(r27768, r27759, MPFR_RNDN); } else { mpfr_set(r27768, r27767, MPFR_RNDN); };
        if (mpfr_get_si(r27743, MPFR_RNDN)) { mpfr_set(r27769, r27747, MPFR_RNDN); } else { mpfr_set(r27769, r27768, MPFR_RNDN); };
        return mpfr_get_d(r27769, MPFR_RNDN);
}

