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

char *name = "NMSE problem 3.3.1";

double f_if(float x) {
        float r5039898 = 1.0f;
        float r5039899 = x;
        float r5039900 = r5039899 + r5039898;
        float r5039901 = r5039898 / r5039900;
        float r5039902 = r5039898 / r5039899;
        float r5039903 = r5039901 - r5039902;
        return r5039903;
}

double f_id(double x) {
        double r5039904 = 1.0;
        double r5039905 = x;
        double r5039906 = r5039905 + r5039904;
        double r5039907 = r5039904 / r5039906;
        double r5039908 = r5039904 / r5039905;
        double r5039909 = r5039907 - r5039908;
        return r5039909;
}


double f_of(float x) {
        float r5039910 = x;
        float r5039911 = -304234235346920.7f;
        bool r5039912 = r5039910 <= r5039911;
        float r5039913 = 1.0f;
        float r5039914 = r5039913 / r5039910;
        float r5039915 = r5039910 * r5039910;
        float r5039916 = r5039914 / r5039915;
        float r5039917 = r5039914 / r5039910;
        float r5039918 = r5039916 - r5039917;
        float r5039919 = 108678362595.63406f;
        bool r5039920 = r5039910 <= r5039919;
        float r5039921 = r5039913 + r5039910;
        float r5039922 = r5039910 - r5039921;
        float r5039923 = r5039910 + r5039913;
        float r5039924 = r5039923 * r5039910;
        float r5039925 = r5039922 / r5039924;
        float r5039926 = 3.0f;
        float r5039927 = pow(r5039910, r5039926);
        float r5039928 = r5039913 / r5039927;
        float r5039929 = 4.0f;
        float r5039930 = pow(r5039910, r5039929);
        float r5039931 = r5039913 / r5039930;
        float r5039932 = r5039913 / r5039915;
        float r5039933 = r5039931 + r5039932;
        float r5039934 = r5039928 - r5039933;
        float r5039935 = r5039920 ? r5039925 : r5039934;
        float r5039936 = r5039912 ? r5039918 : r5039935;
        return r5039936;
}

double f_od(double x) {
        double r5039937 = x;
        double r5039938 = -304234235346920.7;
        bool r5039939 = r5039937 <= r5039938;
        double r5039940 = 1.0;
        double r5039941 = r5039940 / r5039937;
        double r5039942 = r5039937 * r5039937;
        double r5039943 = r5039941 / r5039942;
        double r5039944 = r5039941 / r5039937;
        double r5039945 = r5039943 - r5039944;
        double r5039946 = 108678362595.63406;
        bool r5039947 = r5039937 <= r5039946;
        double r5039948 = r5039940 + r5039937;
        double r5039949 = r5039937 - r5039948;
        double r5039950 = r5039937 + r5039940;
        double r5039951 = r5039950 * r5039937;
        double r5039952 = r5039949 / r5039951;
        double r5039953 = 3.0;
        double r5039954 = pow(r5039937, r5039953);
        double r5039955 = r5039940 / r5039954;
        double r5039956 = 4.0;
        double r5039957 = pow(r5039937, r5039956);
        double r5039958 = r5039940 / r5039957;
        double r5039959 = r5039940 / r5039942;
        double r5039960 = r5039958 + r5039959;
        double r5039961 = r5039955 - r5039960;
        double r5039962 = r5039947 ? r5039952 : r5039961;
        double r5039963 = r5039939 ? r5039945 : r5039962;
        return r5039963;
}

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 r5039964, r5039965, r5039966, r5039967, r5039968, r5039969;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5039964, "1", 10, MPFR_RNDN);
        mpfr_init(r5039965);
        mpfr_init(r5039966);
        mpfr_init(r5039967);
        mpfr_init(r5039968);
        mpfr_init(r5039969);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5039965, x, MPFR_RNDN);
        mpfr_add(r5039966, r5039965, r5039964, MPFR_RNDN);
        mpfr_div(r5039967, r5039964, r5039966, MPFR_RNDN);
        mpfr_div(r5039968, r5039964, r5039965, MPFR_RNDN);
        mpfr_sub(r5039969, r5039967, r5039968, MPFR_RNDN);
        return mpfr_get_d(r5039969, MPFR_RNDN);
}

static mpfr_t r5039970, r5039971, r5039972, r5039973, r5039974, r5039975, r5039976, r5039977, r5039978, r5039979, r5039980, r5039981, r5039982, r5039983, r5039984, r5039985, r5039986, r5039987, r5039988, r5039989, r5039990, r5039991, r5039992, r5039993, r5039994, r5039995, r5039996;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5039970);
        mpfr_init_set_str(r5039971, "-304234235346920.7", 10, MPFR_RNDN);
        mpfr_init(r5039972);
        mpfr_init_set_str(r5039973, "1", 10, MPFR_RNDN);
        mpfr_init(r5039974);
        mpfr_init(r5039975);
        mpfr_init(r5039976);
        mpfr_init(r5039977);
        mpfr_init(r5039978);
        mpfr_init_set_str(r5039979, "108678362595.63406", 10, MPFR_RNDN);
        mpfr_init(r5039980);
        mpfr_init(r5039981);
        mpfr_init(r5039982);
        mpfr_init(r5039983);
        mpfr_init(r5039984);
        mpfr_init(r5039985);
        mpfr_init_set_str(r5039986, "3", 10, MPFR_RNDN);
        mpfr_init(r5039987);
        mpfr_init(r5039988);
        mpfr_init_set_str(r5039989, "4", 10, MPFR_RNDN);
        mpfr_init(r5039990);
        mpfr_init(r5039991);
        mpfr_init(r5039992);
        mpfr_init(r5039993);
        mpfr_init(r5039994);
        mpfr_init(r5039995);
        mpfr_init(r5039996);
}

double f_fm(double x) {
        mpfr_set_d(r5039970, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5039972, mpfr_cmp(r5039970, r5039971) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5039974, r5039973, r5039970, MPFR_RNDN);
        mpfr_sqr(r5039975, r5039970, MPFR_RNDN);
        mpfr_div(r5039976, r5039974, r5039975, MPFR_RNDN);
        mpfr_div(r5039977, r5039974, r5039970, MPFR_RNDN);
        mpfr_sub(r5039978, r5039976, r5039977, MPFR_RNDN);
        ;
        mpfr_set_si(r5039980, mpfr_cmp(r5039970, r5039979) <= 0, MPFR_RNDN);
        mpfr_add(r5039981, r5039973, r5039970, MPFR_RNDN);
        mpfr_sub(r5039982, r5039970, r5039981, MPFR_RNDN);
        mpfr_add(r5039983, r5039970, r5039973, MPFR_RNDN);
        mpfr_mul(r5039984, r5039983, r5039970, MPFR_RNDN);
        mpfr_div(r5039985, r5039982, r5039984, MPFR_RNDN);
        ;
        mpfr_pow(r5039987, r5039970, r5039986, MPFR_RNDN);
        mpfr_div(r5039988, r5039973, r5039987, MPFR_RNDN);
        ;
        mpfr_pow(r5039990, r5039970, r5039989, MPFR_RNDN);
        mpfr_div(r5039991, r5039973, r5039990, MPFR_RNDN);
        mpfr_div(r5039992, r5039973, r5039975, MPFR_RNDN);
        mpfr_add(r5039993, r5039991, r5039992, MPFR_RNDN);
        mpfr_sub(r5039994, r5039988, r5039993, MPFR_RNDN);
        if (mpfr_get_si(r5039980, MPFR_RNDN)) { mpfr_set(r5039995, r5039985, MPFR_RNDN); } else { mpfr_set(r5039995, r5039994, MPFR_RNDN); };
        if (mpfr_get_si(r5039972, MPFR_RNDN)) { mpfr_set(r5039996, r5039978, MPFR_RNDN); } else { mpfr_set(r5039996, r5039995, MPFR_RNDN); };
        return mpfr_get_d(r5039996, MPFR_RNDN);
}

static mpfr_t r5039997, r5039998, r5039999, r5040000, r5040001, r5040002, r5040003, r5040004, r5040005, r5040006, r5040007, r5040008, r5040009, r5040010, r5040011, r5040012, r5040013, r5040014, r5040015, r5040016, r5040017, r5040018, r5040019, r5040020, r5040021, r5040022, r5040023;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5039997);
        mpfr_init_set_str(r5039998, "-304234235346920.7", 10, MPFR_RNDN);
        mpfr_init(r5039999);
        mpfr_init_set_str(r5040000, "1", 10, MPFR_RNDN);
        mpfr_init(r5040001);
        mpfr_init(r5040002);
        mpfr_init(r5040003);
        mpfr_init(r5040004);
        mpfr_init(r5040005);
        mpfr_init_set_str(r5040006, "108678362595.63406", 10, MPFR_RNDN);
        mpfr_init(r5040007);
        mpfr_init(r5040008);
        mpfr_init(r5040009);
        mpfr_init(r5040010);
        mpfr_init(r5040011);
        mpfr_init(r5040012);
        mpfr_init_set_str(r5040013, "3", 10, MPFR_RNDN);
        mpfr_init(r5040014);
        mpfr_init(r5040015);
        mpfr_init_set_str(r5040016, "4", 10, MPFR_RNDN);
        mpfr_init(r5040017);
        mpfr_init(r5040018);
        mpfr_init(r5040019);
        mpfr_init(r5040020);
        mpfr_init(r5040021);
        mpfr_init(r5040022);
        mpfr_init(r5040023);
}

double f_dm(double x) {
        mpfr_set_d(r5039997, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5039999, mpfr_cmp(r5039997, r5039998) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5040001, r5040000, r5039997, MPFR_RNDN);
        mpfr_sqr(r5040002, r5039997, MPFR_RNDN);
        mpfr_div(r5040003, r5040001, r5040002, MPFR_RNDN);
        mpfr_div(r5040004, r5040001, r5039997, MPFR_RNDN);
        mpfr_sub(r5040005, r5040003, r5040004, MPFR_RNDN);
        ;
        mpfr_set_si(r5040007, mpfr_cmp(r5039997, r5040006) <= 0, MPFR_RNDN);
        mpfr_add(r5040008, r5040000, r5039997, MPFR_RNDN);
        mpfr_sub(r5040009, r5039997, r5040008, MPFR_RNDN);
        mpfr_add(r5040010, r5039997, r5040000, MPFR_RNDN);
        mpfr_mul(r5040011, r5040010, r5039997, MPFR_RNDN);
        mpfr_div(r5040012, r5040009, r5040011, MPFR_RNDN);
        ;
        mpfr_pow(r5040014, r5039997, r5040013, MPFR_RNDN);
        mpfr_div(r5040015, r5040000, r5040014, MPFR_RNDN);
        ;
        mpfr_pow(r5040017, r5039997, r5040016, MPFR_RNDN);
        mpfr_div(r5040018, r5040000, r5040017, MPFR_RNDN);
        mpfr_div(r5040019, r5040000, r5040002, MPFR_RNDN);
        mpfr_add(r5040020, r5040018, r5040019, MPFR_RNDN);
        mpfr_sub(r5040021, r5040015, r5040020, MPFR_RNDN);
        if (mpfr_get_si(r5040007, MPFR_RNDN)) { mpfr_set(r5040022, r5040012, MPFR_RNDN); } else { mpfr_set(r5040022, r5040021, MPFR_RNDN); };
        if (mpfr_get_si(r5039999, MPFR_RNDN)) { mpfr_set(r5040023, r5040005, MPFR_RNDN); } else { mpfr_set(r5040023, r5040022, MPFR_RNDN); };
        return mpfr_get_d(r5040023, MPFR_RNDN);
}

