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

char *name = "NMSE example 3.3";

double f_if(float x, float eps) {
        float r4775863 = x;
        float r4775864 = eps;
        float r4775865 = r4775863 + r4775864;
        float r4775866 = sin(r4775865);
        float r4775867 = sin(r4775863);
        float r4775868 = r4775866 - r4775867;
        return r4775868;
}

double f_id(double x, double eps) {
        double r4775869 = x;
        double r4775870 = eps;
        double r4775871 = r4775869 + r4775870;
        double r4775872 = sin(r4775871);
        double r4775873 = sin(r4775869);
        double r4775874 = r4775872 - r4775873;
        return r4775874;
}


double f_of(float x, float eps) {
        float r4775875 = eps;
        float r4775876 = -2.7293140211961047e-19f;
        bool r4775877 = r4775875 <= r4775876;
        float r4775878 = x;
        float r4775879 = sin(r4775878);
        float r4775880 = cos(r4775875);
        float r4775881 = r4775879 * r4775880;
        float r4775882 = cos(r4775878);
        float r4775883 = sin(r4775875);
        float r4775884 = r4775882 * r4775883;
        float r4775885 = r4775884 - r4775879;
        float r4775886 = r4775881 + r4775885;
        float r4775887 = 3.384489567637978e-06f;
        bool r4775888 = r4775875 <= r4775887;
        float r4775889 = 2.0f;
        float r4775890 = r4775875 / r4775889;
        float r4775891 = sin(r4775890);
        float r4775892 = r4775889 * r4775891;
        float r4775893 = r4775878 + r4775875;
        float r4775894 = r4775893 + r4775878;
        float r4775895 = r4775894 / r4775889;
        float r4775896 = cos(r4775895);
        float r4775897 = r4775892 * r4775896;
        float r4775898 = r4775881 + r4775884;
        float r4775899 = r4775898 - r4775879;
        float r4775900 = r4775888 ? r4775897 : r4775899;
        float r4775901 = r4775877 ? r4775886 : r4775900;
        return r4775901;
}

double f_od(double x, double eps) {
        double r4775902 = eps;
        double r4775903 = -2.7293140211961047e-19;
        bool r4775904 = r4775902 <= r4775903;
        double r4775905 = x;
        double r4775906 = sin(r4775905);
        double r4775907 = cos(r4775902);
        double r4775908 = r4775906 * r4775907;
        double r4775909 = cos(r4775905);
        double r4775910 = sin(r4775902);
        double r4775911 = r4775909 * r4775910;
        double r4775912 = r4775911 - r4775906;
        double r4775913 = r4775908 + r4775912;
        double r4775914 = 3.384489567637978e-06;
        bool r4775915 = r4775902 <= r4775914;
        double r4775916 = 2.0;
        double r4775917 = r4775902 / r4775916;
        double r4775918 = sin(r4775917);
        double r4775919 = r4775916 * r4775918;
        double r4775920 = r4775905 + r4775902;
        double r4775921 = r4775920 + r4775905;
        double r4775922 = r4775921 / r4775916;
        double r4775923 = cos(r4775922);
        double r4775924 = r4775919 * r4775923;
        double r4775925 = r4775908 + r4775911;
        double r4775926 = r4775925 - r4775906;
        double r4775927 = r4775915 ? r4775924 : r4775926;
        double r4775928 = r4775904 ? r4775913 : r4775927;
        return r4775928;
}

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 r4775929, r4775930, r4775931, r4775932, r4775933, r4775934;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775929);
        mpfr_init(r4775930);
        mpfr_init(r4775931);
        mpfr_init(r4775932);
        mpfr_init(r4775933);
        mpfr_init(r4775934);
}

double f_im(double x, double eps) {
        mpfr_set_d(r4775929, x, MPFR_RNDN);
        mpfr_set_d(r4775930, eps, MPFR_RNDN);
        mpfr_add(r4775931, r4775929, r4775930, MPFR_RNDN);
        mpfr_sin(r4775932, r4775931, MPFR_RNDN);
        mpfr_sin(r4775933, r4775929, MPFR_RNDN);
        mpfr_sub(r4775934, r4775932, r4775933, MPFR_RNDN);
        return mpfr_get_d(r4775934, MPFR_RNDN);
}

static mpfr_t r4775935, r4775936, r4775937, r4775938, r4775939, r4775940, r4775941, r4775942, r4775943, r4775944, r4775945, r4775946, r4775947, r4775948, r4775949, r4775950, r4775951, r4775952, r4775953, r4775954, r4775955, r4775956, r4775957, r4775958, r4775959, r4775960, r4775961;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775935);
        mpfr_init_set_str(r4775936, "-2.7293140211961047e-19", 10, MPFR_RNDN);
        mpfr_init(r4775937);
        mpfr_init(r4775938);
        mpfr_init(r4775939);
        mpfr_init(r4775940);
        mpfr_init(r4775941);
        mpfr_init(r4775942);
        mpfr_init(r4775943);
        mpfr_init(r4775944);
        mpfr_init(r4775945);
        mpfr_init(r4775946);
        mpfr_init_set_str(r4775947, "3.384489567637978e-06", 10, MPFR_RNDN);
        mpfr_init(r4775948);
        mpfr_init_set_str(r4775949, "2", 10, MPFR_RNDN);
        mpfr_init(r4775950);
        mpfr_init(r4775951);
        mpfr_init(r4775952);
        mpfr_init(r4775953);
        mpfr_init(r4775954);
        mpfr_init(r4775955);
        mpfr_init(r4775956);
        mpfr_init(r4775957);
        mpfr_init(r4775958);
        mpfr_init(r4775959);
        mpfr_init(r4775960);
        mpfr_init(r4775961);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r4775935, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4775937, mpfr_cmp(r4775935, r4775936) <= 0, MPFR_RNDN);
        mpfr_set_d(r4775938, x, MPFR_RNDN);
        mpfr_sin(r4775939, r4775938, MPFR_RNDN);
        mpfr_cos(r4775940, r4775935, MPFR_RNDN);
        mpfr_mul(r4775941, r4775939, r4775940, MPFR_RNDN);
        mpfr_cos(r4775942, r4775938, MPFR_RNDN);
        mpfr_sin(r4775943, r4775935, MPFR_RNDN);
        mpfr_mul(r4775944, r4775942, r4775943, MPFR_RNDN);
        mpfr_sub(r4775945, r4775944, r4775939, MPFR_RNDN);
        mpfr_add(r4775946, r4775941, r4775945, MPFR_RNDN);
        ;
        mpfr_set_si(r4775948, mpfr_cmp(r4775935, r4775947) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r4775950, r4775935, r4775949, MPFR_RNDN);
        mpfr_sin(r4775951, r4775950, MPFR_RNDN);
        mpfr_mul(r4775952, r4775949, r4775951, MPFR_RNDN);
        mpfr_add(r4775953, r4775938, r4775935, MPFR_RNDN);
        mpfr_add(r4775954, r4775953, r4775938, MPFR_RNDN);
        mpfr_div(r4775955, r4775954, r4775949, MPFR_RNDN);
        mpfr_cos(r4775956, r4775955, MPFR_RNDN);
        mpfr_mul(r4775957, r4775952, r4775956, MPFR_RNDN);
        mpfr_add(r4775958, r4775941, r4775944, MPFR_RNDN);
        mpfr_sub(r4775959, r4775958, r4775939, MPFR_RNDN);
        if (mpfr_get_si(r4775948, MPFR_RNDN)) { mpfr_set(r4775960, r4775957, MPFR_RNDN); } else { mpfr_set(r4775960, r4775959, MPFR_RNDN); };
        if (mpfr_get_si(r4775937, MPFR_RNDN)) { mpfr_set(r4775961, r4775946, MPFR_RNDN); } else { mpfr_set(r4775961, r4775960, MPFR_RNDN); };
        return mpfr_get_d(r4775961, MPFR_RNDN);
}

static mpfr_t r4775962, r4775963, r4775964, r4775965, r4775966, r4775967, r4775968, r4775969, r4775970, r4775971, r4775972, r4775973, r4775974, r4775975, r4775976, r4775977, r4775978, r4775979, r4775980, r4775981, r4775982, r4775983, r4775984, r4775985, r4775986, r4775987, r4775988;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775962);
        mpfr_init_set_str(r4775963, "-2.7293140211961047e-19", 10, MPFR_RNDN);
        mpfr_init(r4775964);
        mpfr_init(r4775965);
        mpfr_init(r4775966);
        mpfr_init(r4775967);
        mpfr_init(r4775968);
        mpfr_init(r4775969);
        mpfr_init(r4775970);
        mpfr_init(r4775971);
        mpfr_init(r4775972);
        mpfr_init(r4775973);
        mpfr_init_set_str(r4775974, "3.384489567637978e-06", 10, MPFR_RNDN);
        mpfr_init(r4775975);
        mpfr_init_set_str(r4775976, "2", 10, MPFR_RNDN);
        mpfr_init(r4775977);
        mpfr_init(r4775978);
        mpfr_init(r4775979);
        mpfr_init(r4775980);
        mpfr_init(r4775981);
        mpfr_init(r4775982);
        mpfr_init(r4775983);
        mpfr_init(r4775984);
        mpfr_init(r4775985);
        mpfr_init(r4775986);
        mpfr_init(r4775987);
        mpfr_init(r4775988);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r4775962, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r4775964, mpfr_cmp(r4775962, r4775963) <= 0, MPFR_RNDN);
        mpfr_set_d(r4775965, x, MPFR_RNDN);
        mpfr_sin(r4775966, r4775965, MPFR_RNDN);
        mpfr_cos(r4775967, r4775962, MPFR_RNDN);
        mpfr_mul(r4775968, r4775966, r4775967, MPFR_RNDN);
        mpfr_cos(r4775969, r4775965, MPFR_RNDN);
        mpfr_sin(r4775970, r4775962, MPFR_RNDN);
        mpfr_mul(r4775971, r4775969, r4775970, MPFR_RNDN);
        mpfr_sub(r4775972, r4775971, r4775966, MPFR_RNDN);
        mpfr_add(r4775973, r4775968, r4775972, MPFR_RNDN);
        ;
        mpfr_set_si(r4775975, mpfr_cmp(r4775962, r4775974) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r4775977, r4775962, r4775976, MPFR_RNDN);
        mpfr_sin(r4775978, r4775977, MPFR_RNDN);
        mpfr_mul(r4775979, r4775976, r4775978, MPFR_RNDN);
        mpfr_add(r4775980, r4775965, r4775962, MPFR_RNDN);
        mpfr_add(r4775981, r4775980, r4775965, MPFR_RNDN);
        mpfr_div(r4775982, r4775981, r4775976, MPFR_RNDN);
        mpfr_cos(r4775983, r4775982, MPFR_RNDN);
        mpfr_mul(r4775984, r4775979, r4775983, MPFR_RNDN);
        mpfr_add(r4775985, r4775968, r4775971, MPFR_RNDN);
        mpfr_sub(r4775986, r4775985, r4775966, MPFR_RNDN);
        if (mpfr_get_si(r4775975, MPFR_RNDN)) { mpfr_set(r4775987, r4775984, MPFR_RNDN); } else { mpfr_set(r4775987, r4775986, MPFR_RNDN); };
        if (mpfr_get_si(r4775964, MPFR_RNDN)) { mpfr_set(r4775988, r4775973, MPFR_RNDN); } else { mpfr_set(r4775988, r4775987, MPFR_RNDN); };
        return mpfr_get_d(r4775988, MPFR_RNDN);
}

