#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_2, float c) {
        float r25645 = b_2;
        float r25646 = -r25645;
        float r25647 = r25645 * r25645;
        float r25648 = a;
        float r25649 = c;
        float r25650 = r25648 * r25649;
        float r25651 = r25647 - r25650;
        float r25652 = sqrt(r25651);
        float r25653 = r25646 - r25652;
        float r25654 = r25653 / r25648;
        return r25654;
}

double f_id(double a, double b_2, double c) {
        double r25655 = b_2;
        double r25656 = -r25655;
        double r25657 = r25655 * r25655;
        double r25658 = a;
        double r25659 = c;
        double r25660 = r25658 * r25659;
        double r25661 = r25657 - r25660;
        double r25662 = sqrt(r25661);
        double r25663 = r25656 - r25662;
        double r25664 = r25663 / r25658;
        return r25664;
}


double f_of(float a, float b_2, float c) {
        float r25665 = -1/2;
        float r25666 = b_2;
        float r25667 = r25665 / r25666;
        float r25668 = -718312294.6999037;
        bool r25669 = r25667 <= r25668;
        float r25670 = -r25666;
        float r25671 = r25666 * r25666;
        float r25672 = c;
        float r25673 = a;
        float r25674 = r25672 * r25673;
        float r25675 = r25671 - r25674;
        float r25676 = sqrt(r25675);
        float r25677 = r25670 - r25676;
        float r25678 = 1;
        float r25679 = r25678 / r25673;
        float r25680 = r25677 * r25679;
        float r25681 = -1.812197585128254e-307;
        bool r25682 = r25667 <= r25681;
        float r25683 = r25666 / r25673;
        float r25684 = -2;
        float r25685 = r25683 * r25684;
        float r25686 = 1.2662474311558236e+22;
        bool r25687 = r25667 <= r25686;
        float r25688 = r25672 / r25666;
        float r25689 = 1/2;
        float r25690 = -r25689;
        float r25691 = r25688 * r25690;
        float r25692 = r25676 - r25666;
        float r25693 = cbrt(r25692);
        float r25694 = r25693 * r25693;
        float r25695 = r25672 / r25694;
        float r25696 = r25673 / r25693;
        float r25697 = r25695 * r25696;
        float r25698 = r25697 / r25673;
        float r25699 = r25687 ? r25691 : r25698;
        float r25700 = r25682 ? r25685 : r25699;
        float r25701 = r25669 ? r25680 : r25700;
        return r25701;
}

double f_od(double a, double b_2, double c) {
        double r25702 = -1/2;
        double r25703 = b_2;
        double r25704 = r25702 / r25703;
        double r25705 = -718312294.6999037;
        bool r25706 = r25704 <= r25705;
        double r25707 = -r25703;
        double r25708 = r25703 * r25703;
        double r25709 = c;
        double r25710 = a;
        double r25711 = r25709 * r25710;
        double r25712 = r25708 - r25711;
        double r25713 = sqrt(r25712);
        double r25714 = r25707 - r25713;
        double r25715 = 1;
        double r25716 = r25715 / r25710;
        double r25717 = r25714 * r25716;
        double r25718 = -1.812197585128254e-307;
        bool r25719 = r25704 <= r25718;
        double r25720 = r25703 / r25710;
        double r25721 = -2;
        double r25722 = r25720 * r25721;
        double r25723 = 1.2662474311558236e+22;
        bool r25724 = r25704 <= r25723;
        double r25725 = r25709 / r25703;
        double r25726 = 1/2;
        double r25727 = -r25726;
        double r25728 = r25725 * r25727;
        double r25729 = r25713 - r25703;
        double r25730 = cbrt(r25729);
        double r25731 = r25730 * r25730;
        double r25732 = r25709 / r25731;
        double r25733 = r25710 / r25730;
        double r25734 = r25732 * r25733;
        double r25735 = r25734 / r25710;
        double r25736 = r25724 ? r25728 : r25735;
        double r25737 = r25719 ? r25722 : r25736;
        double r25738 = r25706 ? r25717 : r25737;
        return r25738;
}

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 r25739, r25740, r25741, r25742, r25743, r25744, r25745, r25746, r25747, r25748;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25739);
        mpfr_init(r25740);
        mpfr_init(r25741);
        mpfr_init(r25742);
        mpfr_init(r25743);
        mpfr_init(r25744);
        mpfr_init(r25745);
        mpfr_init(r25746);
        mpfr_init(r25747);
        mpfr_init(r25748);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r25739, b_2, MPFR_RNDN);
        mpfr_neg(r25740, r25739, MPFR_RNDN);
        mpfr_mul(r25741, r25739, r25739, MPFR_RNDN);
        mpfr_set_d(r25742, a, MPFR_RNDN);
        mpfr_set_d(r25743, c, MPFR_RNDN);
        mpfr_mul(r25744, r25742, r25743, MPFR_RNDN);
        mpfr_sub(r25745, r25741, r25744, MPFR_RNDN);
        mpfr_sqrt(r25746, r25745, MPFR_RNDN);
        mpfr_sub(r25747, r25740, r25746, MPFR_RNDN);
        mpfr_div(r25748, r25747, r25742, MPFR_RNDN);
        return mpfr_get_d(r25748, MPFR_RNDN);
}

static mpfr_t r25749, r25750, r25751, r25752, r25753, r25754, r25755, r25756, r25757, r25758, r25759, r25760, r25761, r25762, r25763, r25764, r25765, r25766, r25767, r25768, r25769, r25770, r25771, r25772, r25773, r25774, r25775, r25776, r25777, r25778, r25779, r25780, r25781, r25782, r25783, r25784, r25785;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init_set_str(r25749, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r25750);
        mpfr_init(r25751);
        mpfr_init_set_str(r25752, "-718312294.6999037", 10, MPFR_RNDN);
        mpfr_init(r25753);
        mpfr_init(r25754);
        mpfr_init(r25755);
        mpfr_init(r25756);
        mpfr_init(r25757);
        mpfr_init(r25758);
        mpfr_init(r25759);
        mpfr_init(r25760);
        mpfr_init(r25761);
        mpfr_init_set_str(r25762, "1", 10, MPFR_RNDN);
        mpfr_init(r25763);
        mpfr_init(r25764);
        mpfr_init_set_str(r25765, "-1.812197585128254e-307", 10, MPFR_RNDN);
        mpfr_init(r25766);
        mpfr_init(r25767);
        mpfr_init_set_str(r25768, "-2", 10, MPFR_RNDN);
        mpfr_init(r25769);
        mpfr_init_set_str(r25770, "1.2662474311558236e+22", 10, MPFR_RNDN);
        mpfr_init(r25771);
        mpfr_init(r25772);
        mpfr_init_set_str(r25773, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25774);
        mpfr_init(r25775);
        mpfr_init(r25776);
        mpfr_init(r25777);
        mpfr_init(r25778);
        mpfr_init(r25779);
        mpfr_init(r25780);
        mpfr_init(r25781);
        mpfr_init(r25782);
        mpfr_init(r25783);
        mpfr_init(r25784);
        mpfr_init(r25785);
}

double f_fm(double a, double b_2, double c) {
        ;
        mpfr_set_d(r25750, b_2, MPFR_RNDN);
        mpfr_div(r25751, r25749, r25750, MPFR_RNDN);
        ;
        mpfr_set_si(r25753, mpfr_cmp(r25751, r25752) <= 0, MPFR_RNDN);
        mpfr_neg(r25754, r25750, MPFR_RNDN);
        mpfr_mul(r25755, r25750, r25750, MPFR_RNDN);
        mpfr_set_d(r25756, c, MPFR_RNDN);
        mpfr_set_d(r25757, a, MPFR_RNDN);
        mpfr_mul(r25758, r25756, r25757, MPFR_RNDN);
        mpfr_sub(r25759, r25755, r25758, MPFR_RNDN);
        mpfr_sqrt(r25760, r25759, MPFR_RNDN);
        mpfr_sub(r25761, r25754, r25760, MPFR_RNDN);
        ;
        mpfr_div(r25763, r25762, r25757, MPFR_RNDN);
        mpfr_mul(r25764, r25761, r25763, MPFR_RNDN);
        ;
        mpfr_set_si(r25766, mpfr_cmp(r25751, r25765) <= 0, MPFR_RNDN);
        mpfr_div(r25767, r25750, r25757, MPFR_RNDN);
        ;
        mpfr_mul(r25769, r25767, r25768, MPFR_RNDN);
        ;
        mpfr_set_si(r25771, mpfr_cmp(r25751, r25770) <= 0, MPFR_RNDN);
        mpfr_div(r25772, r25756, r25750, MPFR_RNDN);
        ;
        mpfr_neg(r25774, r25773, MPFR_RNDN);
        mpfr_mul(r25775, r25772, r25774, MPFR_RNDN);
        mpfr_sub(r25776, r25760, r25750, MPFR_RNDN);
        mpfr_cbrt(r25777, r25776, MPFR_RNDN);
        mpfr_mul(r25778, r25777, r25777, MPFR_RNDN);
        mpfr_div(r25779, r25756, r25778, MPFR_RNDN);
        mpfr_div(r25780, r25757, r25777, MPFR_RNDN);
        mpfr_mul(r25781, r25779, r25780, MPFR_RNDN);
        mpfr_div(r25782, r25781, r25757, MPFR_RNDN);
        if (mpfr_get_si(r25771, MPFR_RNDN)) { mpfr_set(r25783, r25775, MPFR_RNDN); } else { mpfr_set(r25783, r25782, MPFR_RNDN); };
        if (mpfr_get_si(r25766, MPFR_RNDN)) { mpfr_set(r25784, r25769, MPFR_RNDN); } else { mpfr_set(r25784, r25783, MPFR_RNDN); };
        if (mpfr_get_si(r25753, MPFR_RNDN)) { mpfr_set(r25785, r25764, MPFR_RNDN); } else { mpfr_set(r25785, r25784, MPFR_RNDN); };
        return mpfr_get_d(r25785, MPFR_RNDN);
}

static mpfr_t r25786, r25787, r25788, r25789, r25790, r25791, r25792, r25793, r25794, r25795, r25796, r25797, r25798, r25799, r25800, r25801, r25802, r25803, r25804, r25805, r25806, r25807, r25808, r25809, r25810, r25811, r25812, r25813, r25814, r25815, r25816, r25817, r25818, r25819, r25820, r25821, r25822;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init_set_str(r25786, "-1/2", 10, MPFR_RNDN);
        mpfr_init(r25787);
        mpfr_init(r25788);
        mpfr_init_set_str(r25789, "-718312294.6999037", 10, MPFR_RNDN);
        mpfr_init(r25790);
        mpfr_init(r25791);
        mpfr_init(r25792);
        mpfr_init(r25793);
        mpfr_init(r25794);
        mpfr_init(r25795);
        mpfr_init(r25796);
        mpfr_init(r25797);
        mpfr_init(r25798);
        mpfr_init_set_str(r25799, "1", 10, MPFR_RNDN);
        mpfr_init(r25800);
        mpfr_init(r25801);
        mpfr_init_set_str(r25802, "-1.812197585128254e-307", 10, MPFR_RNDN);
        mpfr_init(r25803);
        mpfr_init(r25804);
        mpfr_init_set_str(r25805, "-2", 10, MPFR_RNDN);
        mpfr_init(r25806);
        mpfr_init_set_str(r25807, "1.2662474311558236e+22", 10, MPFR_RNDN);
        mpfr_init(r25808);
        mpfr_init(r25809);
        mpfr_init_set_str(r25810, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25811);
        mpfr_init(r25812);
        mpfr_init(r25813);
        mpfr_init(r25814);
        mpfr_init(r25815);
        mpfr_init(r25816);
        mpfr_init(r25817);
        mpfr_init(r25818);
        mpfr_init(r25819);
        mpfr_init(r25820);
        mpfr_init(r25821);
        mpfr_init(r25822);
}

double f_dm(double a, double b_2, double c) {
        ;
        mpfr_set_d(r25787, b_2, MPFR_RNDN);
        mpfr_div(r25788, r25786, r25787, MPFR_RNDN);
        ;
        mpfr_set_si(r25790, mpfr_cmp(r25788, r25789) <= 0, MPFR_RNDN);
        mpfr_neg(r25791, r25787, MPFR_RNDN);
        mpfr_mul(r25792, r25787, r25787, MPFR_RNDN);
        mpfr_set_d(r25793, c, MPFR_RNDN);
        mpfr_set_d(r25794, a, MPFR_RNDN);
        mpfr_mul(r25795, r25793, r25794, MPFR_RNDN);
        mpfr_sub(r25796, r25792, r25795, MPFR_RNDN);
        mpfr_sqrt(r25797, r25796, MPFR_RNDN);
        mpfr_sub(r25798, r25791, r25797, MPFR_RNDN);
        ;
        mpfr_div(r25800, r25799, r25794, MPFR_RNDN);
        mpfr_mul(r25801, r25798, r25800, MPFR_RNDN);
        ;
        mpfr_set_si(r25803, mpfr_cmp(r25788, r25802) <= 0, MPFR_RNDN);
        mpfr_div(r25804, r25787, r25794, MPFR_RNDN);
        ;
        mpfr_mul(r25806, r25804, r25805, MPFR_RNDN);
        ;
        mpfr_set_si(r25808, mpfr_cmp(r25788, r25807) <= 0, MPFR_RNDN);
        mpfr_div(r25809, r25793, r25787, MPFR_RNDN);
        ;
        mpfr_neg(r25811, r25810, MPFR_RNDN);
        mpfr_mul(r25812, r25809, r25811, MPFR_RNDN);
        mpfr_sub(r25813, r25797, r25787, MPFR_RNDN);
        mpfr_cbrt(r25814, r25813, MPFR_RNDN);
        mpfr_mul(r25815, r25814, r25814, MPFR_RNDN);
        mpfr_div(r25816, r25793, r25815, MPFR_RNDN);
        mpfr_div(r25817, r25794, r25814, MPFR_RNDN);
        mpfr_mul(r25818, r25816, r25817, MPFR_RNDN);
        mpfr_div(r25819, r25818, r25794, MPFR_RNDN);
        if (mpfr_get_si(r25808, MPFR_RNDN)) { mpfr_set(r25820, r25812, MPFR_RNDN); } else { mpfr_set(r25820, r25819, MPFR_RNDN); };
        if (mpfr_get_si(r25803, MPFR_RNDN)) { mpfr_set(r25821, r25806, MPFR_RNDN); } else { mpfr_set(r25821, r25820, MPFR_RNDN); };
        if (mpfr_get_si(r25790, MPFR_RNDN)) { mpfr_set(r25822, r25801, MPFR_RNDN); } else { mpfr_set(r25822, r25821, MPFR_RNDN); };
        return mpfr_get_d(r25822, MPFR_RNDN);
}

