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

char *name = "NMSE problem 3.3.5";

double f_if(float x, float eps) {
        float r5352923 = x;
        float r5352924 = eps;
        float r5352925 = r5352923 + r5352924;
        float r5352926 = cos(r5352925);
        float r5352927 = cos(r5352923);
        float r5352928 = r5352926 - r5352927;
        return r5352928;
}

double f_id(double x, double eps) {
        double r5352929 = x;
        double r5352930 = eps;
        double r5352931 = r5352929 + r5352930;
        double r5352932 = cos(r5352931);
        double r5352933 = cos(r5352929);
        double r5352934 = r5352932 - r5352933;
        return r5352934;
}


double f_of(float x, float eps) {
        float r5352935 = eps;
        float r5352936 = -3.043772507835201e-13f;
        bool r5352937 = r5352935 <= r5352936;
        float r5352938 = x;
        float r5352939 = cos(r5352938);
        float r5352940 = cos(r5352935);
        float r5352941 = r5352939 * r5352940;
        float r5352942 = sin(r5352935);
        float r5352943 = sin(r5352938);
        float r5352944 = r5352942 * r5352943;
        float r5352945 = r5352939 + r5352944;
        float r5352946 = exp(r5352945);
        float r5352947 = log(r5352946);
        float r5352948 = r5352941 - r5352947;
        float r5352949 = 2.6514267721199557e-08f;
        bool r5352950 = r5352935 <= r5352949;
        float r5352951 = 0.16666666666666666f;
        float r5352952 = r5352935 * r5352951;
        float r5352953 = r5352938 * (r5352938 * r5352938);
        float r5352954 = r5352952 * r5352953;
        float r5352955 = 0.5f;
        float r5352956 = r5352955 * r5352935;
        float r5352957 = r5352956 + r5352938;
        float r5352958 = r5352935 * r5352957;
        float r5352959 = r5352954 - r5352958;
        float r5352960 = r5352940 * r5352939;
        float r5352961 = r5352960 - r5352939;
        float r5352962 = r5352943 * r5352942;
        float r5352963 = r5352961 - r5352962;
        float r5352964 = exp(r5352963);
        float r5352965 = log(r5352964);
        float r5352966 = r5352950 ? r5352959 : r5352965;
        float r5352967 = r5352937 ? r5352948 : r5352966;
        return r5352967;
}

double f_od(double x, double eps) {
        double r5352968 = eps;
        double r5352969 = -3.043772507835201e-13;
        bool r5352970 = r5352968 <= r5352969;
        double r5352971 = x;
        double r5352972 = cos(r5352971);
        double r5352973 = cos(r5352968);
        double r5352974 = r5352972 * r5352973;
        double r5352975 = sin(r5352968);
        double r5352976 = sin(r5352971);
        double r5352977 = r5352975 * r5352976;
        double r5352978 = r5352972 + r5352977;
        double r5352979 = exp(r5352978);
        double r5352980 = log(r5352979);
        double r5352981 = r5352974 - r5352980;
        double r5352982 = 2.6514267721199557e-08;
        bool r5352983 = r5352968 <= r5352982;
        double r5352984 = 0.16666666666666666;
        double r5352985 = r5352968 * r5352984;
        double r5352986 = r5352971 * (r5352971 * r5352971);
        double r5352987 = r5352985 * r5352986;
        double r5352988 = 0.5;
        double r5352989 = r5352988 * r5352968;
        double r5352990 = r5352989 + r5352971;
        double r5352991 = r5352968 * r5352990;
        double r5352992 = r5352987 - r5352991;
        double r5352993 = r5352973 * r5352972;
        double r5352994 = r5352993 - r5352972;
        double r5352995 = r5352976 * r5352975;
        double r5352996 = r5352994 - r5352995;
        double r5352997 = exp(r5352996);
        double r5352998 = log(r5352997);
        double r5352999 = r5352983 ? r5352992 : r5352998;
        double r5353000 = r5352970 ? r5352981 : r5352999;
        return r5353000;
}

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 r5353001, r5353002, r5353003, r5353004, r5353005, r5353006;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353001);
        mpfr_init(r5353002);
        mpfr_init(r5353003);
        mpfr_init(r5353004);
        mpfr_init(r5353005);
        mpfr_init(r5353006);
}

double f_im(double x, double eps) {
        mpfr_set_d(r5353001, x, MPFR_RNDN);
        mpfr_set_d(r5353002, eps, MPFR_RNDN);
        mpfr_add(r5353003, r5353001, r5353002, MPFR_RNDN);
        mpfr_cos(r5353004, r5353003, MPFR_RNDN);
        mpfr_cos(r5353005, r5353001, MPFR_RNDN);
        mpfr_sub(r5353006, r5353004, r5353005, MPFR_RNDN);
        return mpfr_get_d(r5353006, MPFR_RNDN);
}

static mpfr_t r5353007, r5353008, r5353009, r5353010, r5353011, r5353012, r5353013, r5353014, r5353015, r5353016, r5353017, r5353018, r5353019, r5353020, r5353021, r5353022, r5353023, r5353024, r5353025, r5353026, r5353027, r5353028, r5353029, r5353030, r5353031, r5353032, r5353033, r5353034, r5353035, r5353036, r5353037, r5353038, r5353039;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353007);
        mpfr_init_set_str(r5353008, "-3.043772507835201e-13", 10, MPFR_RNDN);
        mpfr_init(r5353009);
        mpfr_init(r5353010);
        mpfr_init(r5353011);
        mpfr_init(r5353012);
        mpfr_init(r5353013);
        mpfr_init(r5353014);
        mpfr_init(r5353015);
        mpfr_init(r5353016);
        mpfr_init(r5353017);
        mpfr_init(r5353018);
        mpfr_init(r5353019);
        mpfr_init(r5353020);
        mpfr_init_set_str(r5353021, "2.6514267721199557e-08", 10, MPFR_RNDN);
        mpfr_init(r5353022);
        mpfr_init_set_str(r5353023, "1/6", 10, MPFR_RNDN);
        mpfr_init(r5353024);
        mpfr_init(r5353025);
        mpfr_init(r5353026);
        mpfr_init_set_str(r5353027, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5353028);
        mpfr_init(r5353029);
        mpfr_init(r5353030);
        mpfr_init(r5353031);
        mpfr_init(r5353032);
        mpfr_init(r5353033);
        mpfr_init(r5353034);
        mpfr_init(r5353035);
        mpfr_init(r5353036);
        mpfr_init(r5353037);
        mpfr_init(r5353038);
        mpfr_init(r5353039);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r5353007, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5353009, mpfr_cmp(r5353007, r5353008) <= 0, MPFR_RNDN);
        mpfr_set_d(r5353010, x, MPFR_RNDN);
        mpfr_cos(r5353011, r5353010, MPFR_RNDN);
        mpfr_cos(r5353012, r5353007, MPFR_RNDN);
        mpfr_mul(r5353013, r5353011, r5353012, MPFR_RNDN);
        mpfr_sin(r5353014, r5353007, MPFR_RNDN);
        mpfr_sin(r5353015, r5353010, MPFR_RNDN);
        mpfr_mul(r5353016, r5353014, r5353015, MPFR_RNDN);
        mpfr_add(r5353017, r5353011, r5353016, MPFR_RNDN);
        mpfr_exp(r5353018, r5353017, MPFR_RNDN);
        mpfr_log(r5353019, r5353018, MPFR_RNDN);
        mpfr_sub(r5353020, r5353013, r5353019, MPFR_RNDN);
        ;
        mpfr_set_si(r5353022, mpfr_cmp(r5353007, r5353021) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5353024, r5353007, r5353023, MPFR_RNDN);
        mpfr_mul(r5353025, r5353010, r5353010, MPFR_RNDN); mpfr_mul(r5353025, r5353025, r5353010, MPFR_RNDN);
        mpfr_mul(r5353026, r5353024, r5353025, MPFR_RNDN);
        ;
        mpfr_mul(r5353028, r5353027, r5353007, MPFR_RNDN);
        mpfr_add(r5353029, r5353028, r5353010, MPFR_RNDN);
        mpfr_mul(r5353030, r5353007, r5353029, MPFR_RNDN);
        mpfr_sub(r5353031, r5353026, r5353030, MPFR_RNDN);
        mpfr_mul(r5353032, r5353012, r5353011, MPFR_RNDN);
        mpfr_sub(r5353033, r5353032, r5353011, MPFR_RNDN);
        mpfr_mul(r5353034, r5353015, r5353014, MPFR_RNDN);
        mpfr_sub(r5353035, r5353033, r5353034, MPFR_RNDN);
        mpfr_exp(r5353036, r5353035, MPFR_RNDN);
        mpfr_log(r5353037, r5353036, MPFR_RNDN);
        if (mpfr_get_si(r5353022, MPFR_RNDN)) { mpfr_set(r5353038, r5353031, MPFR_RNDN); } else { mpfr_set(r5353038, r5353037, MPFR_RNDN); };
        if (mpfr_get_si(r5353009, MPFR_RNDN)) { mpfr_set(r5353039, r5353020, MPFR_RNDN); } else { mpfr_set(r5353039, r5353038, MPFR_RNDN); };
        return mpfr_get_d(r5353039, MPFR_RNDN);
}

static mpfr_t r5353040, r5353041, r5353042, r5353043, r5353044, r5353045, r5353046, r5353047, r5353048, r5353049, r5353050, r5353051, r5353052, r5353053, r5353054, r5353055, r5353056, r5353057, r5353058, r5353059, r5353060, r5353061, r5353062, r5353063, r5353064, r5353065, r5353066, r5353067, r5353068, r5353069, r5353070, r5353071, r5353072;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353040);
        mpfr_init_set_str(r5353041, "-3.043772507835201e-13", 10, MPFR_RNDN);
        mpfr_init(r5353042);
        mpfr_init(r5353043);
        mpfr_init(r5353044);
        mpfr_init(r5353045);
        mpfr_init(r5353046);
        mpfr_init(r5353047);
        mpfr_init(r5353048);
        mpfr_init(r5353049);
        mpfr_init(r5353050);
        mpfr_init(r5353051);
        mpfr_init(r5353052);
        mpfr_init(r5353053);
        mpfr_init_set_str(r5353054, "2.6514267721199557e-08", 10, MPFR_RNDN);
        mpfr_init(r5353055);
        mpfr_init_set_str(r5353056, "1/6", 10, MPFR_RNDN);
        mpfr_init(r5353057);
        mpfr_init(r5353058);
        mpfr_init(r5353059);
        mpfr_init_set_str(r5353060, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5353061);
        mpfr_init(r5353062);
        mpfr_init(r5353063);
        mpfr_init(r5353064);
        mpfr_init(r5353065);
        mpfr_init(r5353066);
        mpfr_init(r5353067);
        mpfr_init(r5353068);
        mpfr_init(r5353069);
        mpfr_init(r5353070);
        mpfr_init(r5353071);
        mpfr_init(r5353072);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r5353040, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5353042, mpfr_cmp(r5353040, r5353041) <= 0, MPFR_RNDN);
        mpfr_set_d(r5353043, x, MPFR_RNDN);
        mpfr_cos(r5353044, r5353043, MPFR_RNDN);
        mpfr_cos(r5353045, r5353040, MPFR_RNDN);
        mpfr_mul(r5353046, r5353044, r5353045, MPFR_RNDN);
        mpfr_sin(r5353047, r5353040, MPFR_RNDN);
        mpfr_sin(r5353048, r5353043, MPFR_RNDN);
        mpfr_mul(r5353049, r5353047, r5353048, MPFR_RNDN);
        mpfr_add(r5353050, r5353044, r5353049, MPFR_RNDN);
        mpfr_exp(r5353051, r5353050, MPFR_RNDN);
        mpfr_log(r5353052, r5353051, MPFR_RNDN);
        mpfr_sub(r5353053, r5353046, r5353052, MPFR_RNDN);
        ;
        mpfr_set_si(r5353055, mpfr_cmp(r5353040, r5353054) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r5353057, r5353040, r5353056, MPFR_RNDN);
        mpfr_mul(r5353058, r5353043, r5353043, MPFR_RNDN); mpfr_mul(r5353058, r5353058, r5353043, MPFR_RNDN);
        mpfr_mul(r5353059, r5353057, r5353058, MPFR_RNDN);
        ;
        mpfr_mul(r5353061, r5353060, r5353040, MPFR_RNDN);
        mpfr_add(r5353062, r5353061, r5353043, MPFR_RNDN);
        mpfr_mul(r5353063, r5353040, r5353062, MPFR_RNDN);
        mpfr_sub(r5353064, r5353059, r5353063, MPFR_RNDN);
        mpfr_mul(r5353065, r5353045, r5353044, MPFR_RNDN);
        mpfr_sub(r5353066, r5353065, r5353044, MPFR_RNDN);
        mpfr_mul(r5353067, r5353048, r5353047, MPFR_RNDN);
        mpfr_sub(r5353068, r5353066, r5353067, MPFR_RNDN);
        mpfr_exp(r5353069, r5353068, MPFR_RNDN);
        mpfr_log(r5353070, r5353069, MPFR_RNDN);
        if (mpfr_get_si(r5353055, MPFR_RNDN)) { mpfr_set(r5353071, r5353064, MPFR_RNDN); } else { mpfr_set(r5353071, r5353070, MPFR_RNDN); };
        if (mpfr_get_si(r5353042, MPFR_RNDN)) { mpfr_set(r5353072, r5353053, MPFR_RNDN); } else { mpfr_set(r5353072, r5353071, MPFR_RNDN); };
        return mpfr_get_d(r5353072, MPFR_RNDN);
}

