#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 r25661 = b_2;
        float r25662 = -r25661;
        float r25663 = r25661 * r25661;
        float r25664 = a;
        float r25665 = c;
        float r25666 = r25664 * r25665;
        float r25667 = r25663 - r25666;
        float r25668 = sqrt(r25667);
        float r25669 = r25662 - r25668;
        float r25670 = r25669 / r25664;
        return r25670;
}

double f_id(double a, double b_2, double c) {
        double r25671 = b_2;
        double r25672 = -r25671;
        double r25673 = r25671 * r25671;
        double r25674 = a;
        double r25675 = c;
        double r25676 = r25674 * r25675;
        double r25677 = r25673 - r25676;
        double r25678 = sqrt(r25677);
        double r25679 = r25672 - r25678;
        double r25680 = r25679 / r25674;
        return r25680;
}


double f_of(float a, float b_2, float c) {
        float r25681 = b_2;
        float r25682 = -1.494703599709964e-23;
        bool r25683 = r25681 <= r25682;
        float r25684 = c;
        float r25685 = 1/2;
        float r25686 = a;
        float r25687 = r25685 * r25686;
        float r25688 = r25681 / r25684;
        float r25689 = r25687 / r25688;
        float r25690 = 2;
        float r25691 = r25690 * r25681;
        float r25692 = r25689 - r25691;
        float r25693 = r25684 / r25692;
        float r25694 = 8.001508611117114e-56;
        bool r25695 = r25681 <= r25694;
        float r25696 = r25681 * r25681;
        float r25697 = r25686 * r25684;
        float r25698 = r25696 - r25697;
        float r25699 = sqrt(r25698);
        float r25700 = r25699 - r25681;
        float r25701 = cbrt(r25700);
        float r25702 = r25701 * r25701;
        float r25703 = r25684 / r25702;
        float r25704 = r25686 / r25701;
        float r25705 = r25703 * r25704;
        float r25706 = r25705 / r25686;
        float r25707 = r25686 / r25681;
        float r25708 = r25685 * r25684;
        float r25709 = r25707 * r25708;
        float r25710 = r25681 + r25681;
        float r25711 = r25709 - r25710;
        float r25712 = r25711 / r25686;
        float r25713 = r25695 ? r25706 : r25712;
        float r25714 = r25683 ? r25693 : r25713;
        return r25714;
}

double f_od(double a, double b_2, double c) {
        double r25715 = b_2;
        double r25716 = -1.494703599709964e-23;
        bool r25717 = r25715 <= r25716;
        double r25718 = c;
        double r25719 = 1/2;
        double r25720 = a;
        double r25721 = r25719 * r25720;
        double r25722 = r25715 / r25718;
        double r25723 = r25721 / r25722;
        double r25724 = 2;
        double r25725 = r25724 * r25715;
        double r25726 = r25723 - r25725;
        double r25727 = r25718 / r25726;
        double r25728 = 8.001508611117114e-56;
        bool r25729 = r25715 <= r25728;
        double r25730 = r25715 * r25715;
        double r25731 = r25720 * r25718;
        double r25732 = r25730 - r25731;
        double r25733 = sqrt(r25732);
        double r25734 = r25733 - r25715;
        double r25735 = cbrt(r25734);
        double r25736 = r25735 * r25735;
        double r25737 = r25718 / r25736;
        double r25738 = r25720 / r25735;
        double r25739 = r25737 * r25738;
        double r25740 = r25739 / r25720;
        double r25741 = r25720 / r25715;
        double r25742 = r25719 * r25718;
        double r25743 = r25741 * r25742;
        double r25744 = r25715 + r25715;
        double r25745 = r25743 - r25744;
        double r25746 = r25745 / r25720;
        double r25747 = r25729 ? r25740 : r25746;
        double r25748 = r25717 ? r25727 : r25747;
        return r25748;
}

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 r25749, r25750, r25751, r25752, r25753, r25754, r25755, r25756, r25757, r25758;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25749);
        mpfr_init(r25750);
        mpfr_init(r25751);
        mpfr_init(r25752);
        mpfr_init(r25753);
        mpfr_init(r25754);
        mpfr_init(r25755);
        mpfr_init(r25756);
        mpfr_init(r25757);
        mpfr_init(r25758);
}

double f_im(double a, double b_2, double c) {
        mpfr_set_d(r25749, b_2, MPFR_RNDN);
        mpfr_neg(r25750, r25749, MPFR_RNDN);
        mpfr_mul(r25751, r25749, r25749, MPFR_RNDN);
        mpfr_set_d(r25752, a, MPFR_RNDN);
        mpfr_set_d(r25753, c, MPFR_RNDN);
        mpfr_mul(r25754, r25752, r25753, MPFR_RNDN);
        mpfr_sub(r25755, r25751, r25754, MPFR_RNDN);
        mpfr_sqrt(r25756, r25755, MPFR_RNDN);
        mpfr_sub(r25757, r25750, r25756, MPFR_RNDN);
        mpfr_div(r25758, r25757, r25752, MPFR_RNDN);
        return mpfr_get_d(r25758, MPFR_RNDN);
}

static mpfr_t 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, r25786, r25787, r25788, r25789, r25790, r25791, r25792;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25759);
        mpfr_init_set_str(r25760, "-1.494703599709964e-23", 10, MPFR_RNDN);
        mpfr_init(r25761);
        mpfr_init(r25762);
        mpfr_init_set_str(r25763, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25764);
        mpfr_init(r25765);
        mpfr_init(r25766);
        mpfr_init(r25767);
        mpfr_init_set_str(r25768, "2", 10, MPFR_RNDN);
        mpfr_init(r25769);
        mpfr_init(r25770);
        mpfr_init(r25771);
        mpfr_init_set_str(r25772, "8.001508611117114e-56", 10, MPFR_RNDN);
        mpfr_init(r25773);
        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);
        mpfr_init(r25786);
        mpfr_init(r25787);
        mpfr_init(r25788);
        mpfr_init(r25789);
        mpfr_init(r25790);
        mpfr_init(r25791);
        mpfr_init(r25792);
}

double f_fm(double a, double b_2, double c) {
        mpfr_set_d(r25759, b_2, MPFR_RNDN);
        ;
        mpfr_set_si(r25761, mpfr_cmp(r25759, r25760) <= 0, MPFR_RNDN);
        mpfr_set_d(r25762, c, MPFR_RNDN);
        ;
        mpfr_set_d(r25764, a, MPFR_RNDN);
        mpfr_mul(r25765, r25763, r25764, MPFR_RNDN);
        mpfr_div(r25766, r25759, r25762, MPFR_RNDN);
        mpfr_div(r25767, r25765, r25766, MPFR_RNDN);
        ;
        mpfr_mul(r25769, r25768, r25759, MPFR_RNDN);
        mpfr_sub(r25770, r25767, r25769, MPFR_RNDN);
        mpfr_div(r25771, r25762, r25770, MPFR_RNDN);
        ;
        mpfr_set_si(r25773, mpfr_cmp(r25759, r25772) <= 0, MPFR_RNDN);
        mpfr_mul(r25774, r25759, r25759, MPFR_RNDN);
        mpfr_mul(r25775, r25764, r25762, MPFR_RNDN);
        mpfr_sub(r25776, r25774, r25775, MPFR_RNDN);
        mpfr_sqrt(r25777, r25776, MPFR_RNDN);
        mpfr_sub(r25778, r25777, r25759, MPFR_RNDN);
        mpfr_cbrt(r25779, r25778, MPFR_RNDN);
        mpfr_mul(r25780, r25779, r25779, MPFR_RNDN);
        mpfr_div(r25781, r25762, r25780, MPFR_RNDN);
        mpfr_div(r25782, r25764, r25779, MPFR_RNDN);
        mpfr_mul(r25783, r25781, r25782, MPFR_RNDN);
        mpfr_div(r25784, r25783, r25764, MPFR_RNDN);
        mpfr_div(r25785, r25764, r25759, MPFR_RNDN);
        mpfr_mul(r25786, r25763, r25762, MPFR_RNDN);
        mpfr_mul(r25787, r25785, r25786, MPFR_RNDN);
        mpfr_add(r25788, r25759, r25759, MPFR_RNDN);
        mpfr_sub(r25789, r25787, r25788, MPFR_RNDN);
        mpfr_div(r25790, r25789, r25764, MPFR_RNDN);
        if (mpfr_get_si(r25773, MPFR_RNDN)) { mpfr_set(r25791, r25784, MPFR_RNDN); } else { mpfr_set(r25791, r25790, MPFR_RNDN); };
        if (mpfr_get_si(r25761, MPFR_RNDN)) { mpfr_set(r25792, r25771, MPFR_RNDN); } else { mpfr_set(r25792, r25791, MPFR_RNDN); };
        return mpfr_get_d(r25792, MPFR_RNDN);
}

static mpfr_t 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, r25823, r25824, r25825, r25826;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(3408);
        mpfr_init(r25793);
        mpfr_init_set_str(r25794, "-1.494703599709964e-23", 10, MPFR_RNDN);
        mpfr_init(r25795);
        mpfr_init(r25796);
        mpfr_init_set_str(r25797, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25798);
        mpfr_init(r25799);
        mpfr_init(r25800);
        mpfr_init(r25801);
        mpfr_init_set_str(r25802, "2", 10, MPFR_RNDN);
        mpfr_init(r25803);
        mpfr_init(r25804);
        mpfr_init(r25805);
        mpfr_init_set_str(r25806, "8.001508611117114e-56", 10, MPFR_RNDN);
        mpfr_init(r25807);
        mpfr_init(r25808);
        mpfr_init(r25809);
        mpfr_init(r25810);
        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);
        mpfr_init(r25823);
        mpfr_init(r25824);
        mpfr_init(r25825);
        mpfr_init(r25826);
}

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

