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

char *name = "NMSE problem 3.3.3";

double f_if(float x) {
        float r5040731 = 1.0f;
        float r5040732 = x;
        float r5040733 = r5040732 + r5040731;
        float r5040734 = r5040731 / r5040733;
        float r5040735 = 2.0f;
        float r5040736 = r5040735 / r5040732;
        float r5040737 = r5040734 - r5040736;
        float r5040738 = r5040732 - r5040731;
        float r5040739 = r5040731 / r5040738;
        float r5040740 = r5040737 + r5040739;
        return r5040740;
}

double f_id(double x) {
        double r5040741 = 1.0;
        double r5040742 = x;
        double r5040743 = r5040742 + r5040741;
        double r5040744 = r5040741 / r5040743;
        double r5040745 = 2.0;
        double r5040746 = r5040745 / r5040742;
        double r5040747 = r5040744 - r5040746;
        double r5040748 = r5040742 - r5040741;
        double r5040749 = r5040741 / r5040748;
        double r5040750 = r5040747 + r5040749;
        return r5040750;
}


double f_of(float x) {
        float r5040751 = x;
        float r5040752 = -3.9620723213492637f;
        bool r5040753 = r5040751 <= r5040752;
        float r5040754 = 2.0f;
        float r5040755 = 5.0f;
        float r5040756 = pow(r5040751, r5040755);
        float r5040757 = r5040754 / r5040756;
        float r5040758 = r5040751 * (r5040751 * r5040751);
        float r5040759 = r5040754 / r5040758;
        float r5040760 = 7.0f;
        float r5040761 = pow(r5040751, r5040760);
        float r5040762 = r5040754 / r5040761;
        float r5040763 = r5040759 + r5040762;
        float r5040764 = r5040757 + r5040763;
        float r5040765 = 108678362595.63406f;
        bool r5040766 = r5040751 <= r5040765;
        float r5040767 = 1.0f;
        float r5040768 = r5040751 + r5040767;
        float r5040769 = r5040767 / r5040768;
        float r5040770 = r5040754 / r5040751;
        float r5040771 = r5040769 - r5040770;
        float r5040772 = r5040751 - r5040767;
        float r5040773 = r5040767 / r5040772;
        float r5040774 = r5040771 + r5040773;
        float r5040775 = r5040766 ? r5040774 : r5040764;
        float r5040776 = r5040753 ? r5040764 : r5040775;
        return r5040776;
}

double f_od(double x) {
        double r5040777 = x;
        double r5040778 = -3.9620723213492637;
        bool r5040779 = r5040777 <= r5040778;
        double r5040780 = 2.0;
        double r5040781 = 5.0;
        double r5040782 = pow(r5040777, r5040781);
        double r5040783 = r5040780 / r5040782;
        double r5040784 = r5040777 * (r5040777 * r5040777);
        double r5040785 = r5040780 / r5040784;
        double r5040786 = 7.0;
        double r5040787 = pow(r5040777, r5040786);
        double r5040788 = r5040780 / r5040787;
        double r5040789 = r5040785 + r5040788;
        double r5040790 = r5040783 + r5040789;
        double r5040791 = 108678362595.63406;
        bool r5040792 = r5040777 <= r5040791;
        double r5040793 = 1.0;
        double r5040794 = r5040777 + r5040793;
        double r5040795 = r5040793 / r5040794;
        double r5040796 = r5040780 / r5040777;
        double r5040797 = r5040795 - r5040796;
        double r5040798 = r5040777 - r5040793;
        double r5040799 = r5040793 / r5040798;
        double r5040800 = r5040797 + r5040799;
        double r5040801 = r5040792 ? r5040800 : r5040790;
        double r5040802 = r5040779 ? r5040790 : r5040801;
        return r5040802;
}

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 r5040803, r5040804, r5040805, r5040806, r5040807, r5040808, r5040809, r5040810, r5040811, r5040812;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5040803, "1", 10, MPFR_RNDN);
        mpfr_init(r5040804);
        mpfr_init(r5040805);
        mpfr_init(r5040806);
        mpfr_init_set_str(r5040807, "2", 10, MPFR_RNDN);
        mpfr_init(r5040808);
        mpfr_init(r5040809);
        mpfr_init(r5040810);
        mpfr_init(r5040811);
        mpfr_init(r5040812);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5040804, x, MPFR_RNDN);
        mpfr_add(r5040805, r5040804, r5040803, MPFR_RNDN);
        mpfr_div(r5040806, r5040803, r5040805, MPFR_RNDN);
        ;
        mpfr_div(r5040808, r5040807, r5040804, MPFR_RNDN);
        mpfr_sub(r5040809, r5040806, r5040808, MPFR_RNDN);
        mpfr_sub(r5040810, r5040804, r5040803, MPFR_RNDN);
        mpfr_div(r5040811, r5040803, r5040810, MPFR_RNDN);
        mpfr_add(r5040812, r5040809, r5040811, MPFR_RNDN);
        return mpfr_get_d(r5040812, MPFR_RNDN);
}

static mpfr_t r5040813, r5040814, r5040815, r5040816, r5040817, r5040818, r5040819, r5040820, r5040821, r5040822, r5040823, r5040824, r5040825, r5040826, r5040827, r5040828, r5040829, r5040830, r5040831, r5040832, r5040833, r5040834, r5040835, r5040836, r5040837, r5040838;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040813);
        mpfr_init_set_str(r5040814, "-3.9620723213492637", 10, MPFR_RNDN);
        mpfr_init(r5040815);
        mpfr_init_set_str(r5040816, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5040817, "5", 10, MPFR_RNDN);
        mpfr_init(r5040818);
        mpfr_init(r5040819);
        mpfr_init(r5040820);
        mpfr_init(r5040821);
        mpfr_init_set_str(r5040822, "7", 10, MPFR_RNDN);
        mpfr_init(r5040823);
        mpfr_init(r5040824);
        mpfr_init(r5040825);
        mpfr_init(r5040826);
        mpfr_init_set_str(r5040827, "108678362595.63406", 10, MPFR_RNDN);
        mpfr_init(r5040828);
        mpfr_init_set_str(r5040829, "1", 10, MPFR_RNDN);
        mpfr_init(r5040830);
        mpfr_init(r5040831);
        mpfr_init(r5040832);
        mpfr_init(r5040833);
        mpfr_init(r5040834);
        mpfr_init(r5040835);
        mpfr_init(r5040836);
        mpfr_init(r5040837);
        mpfr_init(r5040838);
}

double f_fm(double x) {
        mpfr_set_d(r5040813, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5040815, mpfr_cmp(r5040813, r5040814) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5040818, r5040813, r5040817, MPFR_RNDN);
        mpfr_div(r5040819, r5040816, r5040818, MPFR_RNDN);
        mpfr_mul(r5040820, r5040813, r5040813, MPFR_RNDN); mpfr_mul(r5040820, r5040820, r5040813, MPFR_RNDN);
        mpfr_div(r5040821, r5040816, r5040820, MPFR_RNDN);
        ;
        mpfr_pow(r5040823, r5040813, r5040822, MPFR_RNDN);
        mpfr_div(r5040824, r5040816, r5040823, MPFR_RNDN);
        mpfr_add(r5040825, r5040821, r5040824, MPFR_RNDN);
        mpfr_add(r5040826, r5040819, r5040825, MPFR_RNDN);
        ;
        mpfr_set_si(r5040828, mpfr_cmp(r5040813, r5040827) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r5040830, r5040813, r5040829, MPFR_RNDN);
        mpfr_div(r5040831, r5040829, r5040830, MPFR_RNDN);
        mpfr_div(r5040832, r5040816, r5040813, MPFR_RNDN);
        mpfr_sub(r5040833, r5040831, r5040832, MPFR_RNDN);
        mpfr_sub(r5040834, r5040813, r5040829, MPFR_RNDN);
        mpfr_div(r5040835, r5040829, r5040834, MPFR_RNDN);
        mpfr_add(r5040836, r5040833, r5040835, MPFR_RNDN);
        if (mpfr_get_si(r5040828, MPFR_RNDN)) { mpfr_set(r5040837, r5040836, MPFR_RNDN); } else { mpfr_set(r5040837, r5040826, MPFR_RNDN); };
        if (mpfr_get_si(r5040815, MPFR_RNDN)) { mpfr_set(r5040838, r5040826, MPFR_RNDN); } else { mpfr_set(r5040838, r5040837, MPFR_RNDN); };
        return mpfr_get_d(r5040838, MPFR_RNDN);
}

static mpfr_t r5040839, r5040840, r5040841, r5040842, r5040843, r5040844, r5040845, r5040846, r5040847, r5040848, r5040849, r5040850, r5040851, r5040852, r5040853, r5040854, r5040855, r5040856, r5040857, r5040858, r5040859, r5040860, r5040861, r5040862, r5040863, r5040864;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040839);
        mpfr_init_set_str(r5040840, "-3.9620723213492637", 10, MPFR_RNDN);
        mpfr_init(r5040841);
        mpfr_init_set_str(r5040842, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5040843, "5", 10, MPFR_RNDN);
        mpfr_init(r5040844);
        mpfr_init(r5040845);
        mpfr_init(r5040846);
        mpfr_init(r5040847);
        mpfr_init_set_str(r5040848, "7", 10, MPFR_RNDN);
        mpfr_init(r5040849);
        mpfr_init(r5040850);
        mpfr_init(r5040851);
        mpfr_init(r5040852);
        mpfr_init_set_str(r5040853, "108678362595.63406", 10, MPFR_RNDN);
        mpfr_init(r5040854);
        mpfr_init_set_str(r5040855, "1", 10, MPFR_RNDN);
        mpfr_init(r5040856);
        mpfr_init(r5040857);
        mpfr_init(r5040858);
        mpfr_init(r5040859);
        mpfr_init(r5040860);
        mpfr_init(r5040861);
        mpfr_init(r5040862);
        mpfr_init(r5040863);
        mpfr_init(r5040864);
}

double f_dm(double x) {
        mpfr_set_d(r5040839, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5040841, mpfr_cmp(r5040839, r5040840) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5040844, r5040839, r5040843, MPFR_RNDN);
        mpfr_div(r5040845, r5040842, r5040844, MPFR_RNDN);
        mpfr_mul(r5040846, r5040839, r5040839, MPFR_RNDN); mpfr_mul(r5040846, r5040846, r5040839, MPFR_RNDN);
        mpfr_div(r5040847, r5040842, r5040846, MPFR_RNDN);
        ;
        mpfr_pow(r5040849, r5040839, r5040848, MPFR_RNDN);
        mpfr_div(r5040850, r5040842, r5040849, MPFR_RNDN);
        mpfr_add(r5040851, r5040847, r5040850, MPFR_RNDN);
        mpfr_add(r5040852, r5040845, r5040851, MPFR_RNDN);
        ;
        mpfr_set_si(r5040854, mpfr_cmp(r5040839, r5040853) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r5040856, r5040839, r5040855, MPFR_RNDN);
        mpfr_div(r5040857, r5040855, r5040856, MPFR_RNDN);
        mpfr_div(r5040858, r5040842, r5040839, MPFR_RNDN);
        mpfr_sub(r5040859, r5040857, r5040858, MPFR_RNDN);
        mpfr_sub(r5040860, r5040839, r5040855, MPFR_RNDN);
        mpfr_div(r5040861, r5040855, r5040860, MPFR_RNDN);
        mpfr_add(r5040862, r5040859, r5040861, MPFR_RNDN);
        if (mpfr_get_si(r5040854, MPFR_RNDN)) { mpfr_set(r5040863, r5040862, MPFR_RNDN); } else { mpfr_set(r5040863, r5040852, MPFR_RNDN); };
        if (mpfr_get_si(r5040841, MPFR_RNDN)) { mpfr_set(r5040864, r5040852, MPFR_RNDN); } else { mpfr_set(r5040864, r5040863, MPFR_RNDN); };
        return mpfr_get_d(r5040864, MPFR_RNDN);
}

