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

char *name = "NMSE problem 3.3.2";

double f_if(float x, float eps) {
        float r5040865 = x;
        float r5040866 = eps;
        float r5040867 = r5040865 + r5040866;
        float r5040868 = tan(r5040867);
        float r5040869 = tan(r5040865);
        float r5040870 = r5040868 - r5040869;
        return r5040870;
}

double f_id(double x, double eps) {
        double r5040871 = x;
        double r5040872 = eps;
        double r5040873 = r5040871 + r5040872;
        double r5040874 = tan(r5040873);
        double r5040875 = tan(r5040871);
        double r5040876 = r5040874 - r5040875;
        return r5040876;
}


double f_of(float x, float eps) {
        float r5040877 = eps;
        float r5040878 = -2.5569065403496266e-24f;
        bool r5040879 = r5040877 <= r5040878;
        float r5040880 = x;
        float r5040881 = sin(r5040880);
        float r5040882 = cos(r5040877);
        float r5040883 = r5040881 * r5040882;
        float r5040884 = cos(r5040880);
        float r5040885 = sin(r5040877);
        float r5040886 = r5040884 * r5040885;
        float r5040887 = r5040883 + r5040886;
        float r5040888 = r5040884 * r5040882;
        float r5040889 = r5040881 * r5040885;
        float r5040890 = r5040888 - r5040889;
        float r5040891 = r5040887 / r5040890;
        float r5040892 = tan(r5040880);
        float r5040893 = r5040891 - r5040892;
        float r5040894 = 1.0388221479750895e-47f;
        bool r5040895 = r5040877 <= r5040894;
        float r5040896 = 4.0f;
        float r5040897 = pow(r5040877, r5040896);
        float r5040898 = r5040880 * (r5040880 * r5040880);
        float r5040899 = r5040897 * r5040898;
        float r5040900 = r5040877 + r5040899;
        float r5040901 = r5040880 * r5040880;
        float r5040902 = r5040877 * (r5040877 * r5040877);
        float r5040903 = r5040901 * r5040902;
        float r5040904 = r5040900 + r5040903;
        float r5040905 = r5040895 ? r5040904 : r5040893;
        float r5040906 = r5040879 ? r5040893 : r5040905;
        return r5040906;
}

double f_od(double x, double eps) {
        double r5040907 = eps;
        double r5040908 = -2.5569065403496266e-24;
        bool r5040909 = r5040907 <= r5040908;
        double r5040910 = x;
        double r5040911 = sin(r5040910);
        double r5040912 = cos(r5040907);
        double r5040913 = r5040911 * r5040912;
        double r5040914 = cos(r5040910);
        double r5040915 = sin(r5040907);
        double r5040916 = r5040914 * r5040915;
        double r5040917 = r5040913 + r5040916;
        double r5040918 = r5040914 * r5040912;
        double r5040919 = r5040911 * r5040915;
        double r5040920 = r5040918 - r5040919;
        double r5040921 = r5040917 / r5040920;
        double r5040922 = tan(r5040910);
        double r5040923 = r5040921 - r5040922;
        double r5040924 = 1.0388221479750895e-47;
        bool r5040925 = r5040907 <= r5040924;
        double r5040926 = 4.0;
        double r5040927 = pow(r5040907, r5040926);
        double r5040928 = r5040910 * (r5040910 * r5040910);
        double r5040929 = r5040927 * r5040928;
        double r5040930 = r5040907 + r5040929;
        double r5040931 = r5040910 * r5040910;
        double r5040932 = r5040907 * (r5040907 * r5040907);
        double r5040933 = r5040931 * r5040932;
        double r5040934 = r5040930 + r5040933;
        double r5040935 = r5040925 ? r5040934 : r5040923;
        double r5040936 = r5040909 ? r5040923 : r5040935;
        return r5040936;
}

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 r5040937, r5040938, r5040939, r5040940, r5040941, r5040942;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040937);
        mpfr_init(r5040938);
        mpfr_init(r5040939);
        mpfr_init(r5040940);
        mpfr_init(r5040941);
        mpfr_init(r5040942);
}

double f_im(double x, double eps) {
        mpfr_set_d(r5040937, x, MPFR_RNDN);
        mpfr_set_d(r5040938, eps, MPFR_RNDN);
        mpfr_add(r5040939, r5040937, r5040938, MPFR_RNDN);
        mpfr_tan(r5040940, r5040939, MPFR_RNDN);
        mpfr_tan(r5040941, r5040937, MPFR_RNDN);
        mpfr_sub(r5040942, r5040940, r5040941, MPFR_RNDN);
        return mpfr_get_d(r5040942, MPFR_RNDN);
}

static mpfr_t r5040943, r5040944, r5040945, r5040946, r5040947, r5040948, r5040949, r5040950, r5040951, r5040952, r5040953, r5040954, r5040955, r5040956, r5040957, r5040958, r5040959, r5040960, r5040961, r5040962, r5040963, r5040964, r5040965, r5040966, r5040967, r5040968, r5040969, r5040970, r5040971, r5040972;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040943);
        mpfr_init_set_str(r5040944, "-2.5569065403496266e-24", 10, MPFR_RNDN);
        mpfr_init(r5040945);
        mpfr_init(r5040946);
        mpfr_init(r5040947);
        mpfr_init(r5040948);
        mpfr_init(r5040949);
        mpfr_init(r5040950);
        mpfr_init(r5040951);
        mpfr_init(r5040952);
        mpfr_init(r5040953);
        mpfr_init(r5040954);
        mpfr_init(r5040955);
        mpfr_init(r5040956);
        mpfr_init(r5040957);
        mpfr_init(r5040958);
        mpfr_init(r5040959);
        mpfr_init_set_str(r5040960, "1.0388221479750895e-47", 10, MPFR_RNDN);
        mpfr_init(r5040961);
        mpfr_init_set_str(r5040962, "4", 10, MPFR_RNDN);
        mpfr_init(r5040963);
        mpfr_init(r5040964);
        mpfr_init(r5040965);
        mpfr_init(r5040966);
        mpfr_init(r5040967);
        mpfr_init(r5040968);
        mpfr_init(r5040969);
        mpfr_init(r5040970);
        mpfr_init(r5040971);
        mpfr_init(r5040972);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r5040943, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5040945, mpfr_cmp(r5040943, r5040944) <= 0, MPFR_RNDN);
        mpfr_set_d(r5040946, x, MPFR_RNDN);
        mpfr_sin(r5040947, r5040946, MPFR_RNDN);
        mpfr_cos(r5040948, r5040943, MPFR_RNDN);
        mpfr_mul(r5040949, r5040947, r5040948, MPFR_RNDN);
        mpfr_cos(r5040950, r5040946, MPFR_RNDN);
        mpfr_sin(r5040951, r5040943, MPFR_RNDN);
        mpfr_mul(r5040952, r5040950, r5040951, MPFR_RNDN);
        mpfr_add(r5040953, r5040949, r5040952, MPFR_RNDN);
        mpfr_mul(r5040954, r5040950, r5040948, MPFR_RNDN);
        mpfr_mul(r5040955, r5040947, r5040951, MPFR_RNDN);
        mpfr_sub(r5040956, r5040954, r5040955, MPFR_RNDN);
        mpfr_div(r5040957, r5040953, r5040956, MPFR_RNDN);
        mpfr_tan(r5040958, r5040946, MPFR_RNDN);
        mpfr_sub(r5040959, r5040957, r5040958, MPFR_RNDN);
        ;
        mpfr_set_si(r5040961, mpfr_cmp(r5040943, r5040960) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r5040963, r5040943, r5040962, MPFR_RNDN);
        mpfr_mul(r5040964, r5040946, r5040946, MPFR_RNDN); mpfr_mul(r5040964, r5040964, r5040946, MPFR_RNDN);
        mpfr_mul(r5040965, r5040963, r5040964, MPFR_RNDN);
        mpfr_add(r5040966, r5040943, r5040965, MPFR_RNDN);
        mpfr_mul(r5040967, r5040946, r5040946, MPFR_RNDN);
        mpfr_mul(r5040968, r5040943, r5040943, MPFR_RNDN); mpfr_mul(r5040968, r5040968, r5040943, MPFR_RNDN);
        mpfr_mul(r5040969, r5040967, r5040968, MPFR_RNDN);
        mpfr_add(r5040970, r5040966, r5040969, MPFR_RNDN);
        if (mpfr_get_si(r5040961, MPFR_RNDN)) { mpfr_set(r5040971, r5040970, MPFR_RNDN); } else { mpfr_set(r5040971, r5040959, MPFR_RNDN); };
        if (mpfr_get_si(r5040945, MPFR_RNDN)) { mpfr_set(r5040972, r5040959, MPFR_RNDN); } else { mpfr_set(r5040972, r5040971, MPFR_RNDN); };
        return mpfr_get_d(r5040972, MPFR_RNDN);
}

static mpfr_t r5040973, r5040974, r5040975, r5040976, r5040977, r5040978, r5040979, r5040980, r5040981, r5040982, r5040983, r5040984, r5040985, r5040986, r5040987, r5040988, r5040989, r5040990, r5040991, r5040992, r5040993, r5040994, r5040995, r5040996, r5040997, r5040998, r5040999, r5041000, r5041001, r5041002;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5040973);
        mpfr_init_set_str(r5040974, "-2.5569065403496266e-24", 10, MPFR_RNDN);
        mpfr_init(r5040975);
        mpfr_init(r5040976);
        mpfr_init(r5040977);
        mpfr_init(r5040978);
        mpfr_init(r5040979);
        mpfr_init(r5040980);
        mpfr_init(r5040981);
        mpfr_init(r5040982);
        mpfr_init(r5040983);
        mpfr_init(r5040984);
        mpfr_init(r5040985);
        mpfr_init(r5040986);
        mpfr_init(r5040987);
        mpfr_init(r5040988);
        mpfr_init(r5040989);
        mpfr_init_set_str(r5040990, "1.0388221479750895e-47", 10, MPFR_RNDN);
        mpfr_init(r5040991);
        mpfr_init_set_str(r5040992, "4", 10, MPFR_RNDN);
        mpfr_init(r5040993);
        mpfr_init(r5040994);
        mpfr_init(r5040995);
        mpfr_init(r5040996);
        mpfr_init(r5040997);
        mpfr_init(r5040998);
        mpfr_init(r5040999);
        mpfr_init(r5041000);
        mpfr_init(r5041001);
        mpfr_init(r5041002);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r5040973, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5040975, mpfr_cmp(r5040973, r5040974) <= 0, MPFR_RNDN);
        mpfr_set_d(r5040976, x, MPFR_RNDN);
        mpfr_sin(r5040977, r5040976, MPFR_RNDN);
        mpfr_cos(r5040978, r5040973, MPFR_RNDN);
        mpfr_mul(r5040979, r5040977, r5040978, MPFR_RNDN);
        mpfr_cos(r5040980, r5040976, MPFR_RNDN);
        mpfr_sin(r5040981, r5040973, MPFR_RNDN);
        mpfr_mul(r5040982, r5040980, r5040981, MPFR_RNDN);
        mpfr_add(r5040983, r5040979, r5040982, MPFR_RNDN);
        mpfr_mul(r5040984, r5040980, r5040978, MPFR_RNDN);
        mpfr_mul(r5040985, r5040977, r5040981, MPFR_RNDN);
        mpfr_sub(r5040986, r5040984, r5040985, MPFR_RNDN);
        mpfr_div(r5040987, r5040983, r5040986, MPFR_RNDN);
        mpfr_tan(r5040988, r5040976, MPFR_RNDN);
        mpfr_sub(r5040989, r5040987, r5040988, MPFR_RNDN);
        ;
        mpfr_set_si(r5040991, mpfr_cmp(r5040973, r5040990) <= 0, MPFR_RNDN);
        ;
        mpfr_pow(r5040993, r5040973, r5040992, MPFR_RNDN);
        mpfr_mul(r5040994, r5040976, r5040976, MPFR_RNDN); mpfr_mul(r5040994, r5040994, r5040976, MPFR_RNDN);
        mpfr_mul(r5040995, r5040993, r5040994, MPFR_RNDN);
        mpfr_add(r5040996, r5040973, r5040995, MPFR_RNDN);
        mpfr_mul(r5040997, r5040976, r5040976, MPFR_RNDN);
        mpfr_mul(r5040998, r5040973, r5040973, MPFR_RNDN); mpfr_mul(r5040998, r5040998, r5040973, MPFR_RNDN);
        mpfr_mul(r5040999, r5040997, r5040998, MPFR_RNDN);
        mpfr_add(r5041000, r5040996, r5040999, MPFR_RNDN);
        if (mpfr_get_si(r5040991, MPFR_RNDN)) { mpfr_set(r5041001, r5041000, MPFR_RNDN); } else { mpfr_set(r5041001, r5040989, MPFR_RNDN); };
        if (mpfr_get_si(r5040975, MPFR_RNDN)) { mpfr_set(r5041002, r5040989, MPFR_RNDN); } else { mpfr_set(r5041002, r5041001, MPFR_RNDN); };
        return mpfr_get_d(r5041002, MPFR_RNDN);
}

