#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 r5320917 = x;
        float r5320918 = eps;
        float r5320919 = r5320917 + r5320918;
        float r5320920 = sin(r5320919);
        float r5320921 = sin(r5320917);
        float r5320922 = r5320920 - r5320921;
        return r5320922;
}

double f_id(double x, double eps) {
        double r5320923 = x;
        double r5320924 = eps;
        double r5320925 = r5320923 + r5320924;
        double r5320926 = sin(r5320925);
        double r5320927 = sin(r5320923);
        double r5320928 = r5320926 - r5320927;
        return r5320928;
}


double f_of(float x, float eps) {
        float r5320929 = eps;
        float r5320930 = -8.336964433172839e-83f;
        bool r5320931 = r5320929 <= r5320930;
        float r5320932 = x;
        float r5320933 = sin(r5320932);
        float r5320934 = cos(r5320929);
        float r5320935 = r5320933 * r5320934;
        float r5320936 = r5320935 * r5320935;
        float r5320937 = cos(r5320932);
        float r5320938 = sin(r5320929);
        float r5320939 = r5320937 * r5320938;
        float r5320940 = r5320939 * r5320939;
        float r5320941 = r5320936 - r5320940;
        float r5320942 = r5320935 - r5320939;
        float r5320943 = r5320941 / r5320942;
        float r5320944 = r5320943 - r5320933;
        float r5320945 = 9.15602328414514e-96f;
        bool r5320946 = r5320929 <= r5320945;
        float r5320947 = r5320932 + r5320929;
        float r5320948 = r5320932 * r5320929;
        float r5320949 = r5320947 * r5320948;
        float r5320950 = 0.5f;
        float r5320951 = r5320949 * r5320950;
        float r5320952 = r5320929 - r5320951;
        float r5320953 = exp(r5320935);
        float r5320954 = log(r5320953);
        float r5320955 = r5320939 - r5320933;
        float r5320956 = r5320954 + r5320955;
        float r5320957 = r5320946 ? r5320952 : r5320956;
        float r5320958 = r5320931 ? r5320944 : r5320957;
        return r5320958;
}

double f_od(double x, double eps) {
        double r5320959 = eps;
        double r5320960 = -8.336964433172839e-83;
        bool r5320961 = r5320959 <= r5320960;
        double r5320962 = x;
        double r5320963 = sin(r5320962);
        double r5320964 = cos(r5320959);
        double r5320965 = r5320963 * r5320964;
        double r5320966 = r5320965 * r5320965;
        double r5320967 = cos(r5320962);
        double r5320968 = sin(r5320959);
        double r5320969 = r5320967 * r5320968;
        double r5320970 = r5320969 * r5320969;
        double r5320971 = r5320966 - r5320970;
        double r5320972 = r5320965 - r5320969;
        double r5320973 = r5320971 / r5320972;
        double r5320974 = r5320973 - r5320963;
        double r5320975 = 9.15602328414514e-96;
        bool r5320976 = r5320959 <= r5320975;
        double r5320977 = r5320962 + r5320959;
        double r5320978 = r5320962 * r5320959;
        double r5320979 = r5320977 * r5320978;
        double r5320980 = 0.5;
        double r5320981 = r5320979 * r5320980;
        double r5320982 = r5320959 - r5320981;
        double r5320983 = exp(r5320965);
        double r5320984 = log(r5320983);
        double r5320985 = r5320969 - r5320963;
        double r5320986 = r5320984 + r5320985;
        double r5320987 = r5320976 ? r5320982 : r5320986;
        double r5320988 = r5320961 ? r5320974 : r5320987;
        return r5320988;
}

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 r5320989, r5320990, r5320991, r5320992, r5320993, r5320994;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320989);
        mpfr_init(r5320990);
        mpfr_init(r5320991);
        mpfr_init(r5320992);
        mpfr_init(r5320993);
        mpfr_init(r5320994);
}

double f_im(double x, double eps) {
        mpfr_set_d(r5320989, x, MPFR_RNDN);
        mpfr_set_d(r5320990, eps, MPFR_RNDN);
        mpfr_add(r5320991, r5320989, r5320990, MPFR_RNDN);
        mpfr_sin(r5320992, r5320991, MPFR_RNDN);
        mpfr_sin(r5320993, r5320989, MPFR_RNDN);
        mpfr_sub(r5320994, r5320992, r5320993, MPFR_RNDN);
        return mpfr_get_d(r5320994, MPFR_RNDN);
}

static mpfr_t r5320995, r5320996, r5320997, r5320998, r5320999, r5321000, r5321001, r5321002, r5321003, r5321004, r5321005, r5321006, r5321007, r5321008, r5321009, r5321010, r5321011, r5321012, r5321013, r5321014, r5321015, r5321016, r5321017, r5321018, r5321019, r5321020, r5321021, r5321022, r5321023, r5321024;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320995);
        mpfr_init_set_str(r5320996, "-8.336964433172839e-83", 10, MPFR_RNDN);
        mpfr_init(r5320997);
        mpfr_init(r5320998);
        mpfr_init(r5320999);
        mpfr_init(r5321000);
        mpfr_init(r5321001);
        mpfr_init(r5321002);
        mpfr_init(r5321003);
        mpfr_init(r5321004);
        mpfr_init(r5321005);
        mpfr_init(r5321006);
        mpfr_init(r5321007);
        mpfr_init(r5321008);
        mpfr_init(r5321009);
        mpfr_init(r5321010);
        mpfr_init_set_str(r5321011, "9.15602328414514e-96", 10, MPFR_RNDN);
        mpfr_init(r5321012);
        mpfr_init(r5321013);
        mpfr_init(r5321014);
        mpfr_init(r5321015);
        mpfr_init_set_str(r5321016, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5321017);
        mpfr_init(r5321018);
        mpfr_init(r5321019);
        mpfr_init(r5321020);
        mpfr_init(r5321021);
        mpfr_init(r5321022);
        mpfr_init(r5321023);
        mpfr_init(r5321024);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r5320995, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5320997, mpfr_cmp(r5320995, r5320996) <= 0, MPFR_RNDN);
        mpfr_set_d(r5320998, x, MPFR_RNDN);
        mpfr_sin(r5320999, r5320998, MPFR_RNDN);
        mpfr_cos(r5321000, r5320995, MPFR_RNDN);
        mpfr_mul(r5321001, r5320999, r5321000, MPFR_RNDN);
        mpfr_sqr(r5321002, r5321001, MPFR_RNDN);
        mpfr_cos(r5321003, r5320998, MPFR_RNDN);
        mpfr_sin(r5321004, r5320995, MPFR_RNDN);
        mpfr_mul(r5321005, r5321003, r5321004, MPFR_RNDN);
        mpfr_sqr(r5321006, r5321005, MPFR_RNDN);
        mpfr_sub(r5321007, r5321002, r5321006, MPFR_RNDN);
        mpfr_sub(r5321008, r5321001, r5321005, MPFR_RNDN);
        mpfr_div(r5321009, r5321007, r5321008, MPFR_RNDN);
        mpfr_sub(r5321010, r5321009, r5320999, MPFR_RNDN);
        ;
        mpfr_set_si(r5321012, mpfr_cmp(r5320995, r5321011) <= 0, MPFR_RNDN);
        mpfr_add(r5321013, r5320998, r5320995, MPFR_RNDN);
        mpfr_mul(r5321014, r5320998, r5320995, MPFR_RNDN);
        mpfr_mul(r5321015, r5321013, r5321014, MPFR_RNDN);
        ;
        mpfr_mul(r5321017, r5321015, r5321016, MPFR_RNDN);
        mpfr_sub(r5321018, r5320995, r5321017, MPFR_RNDN);
        mpfr_exp(r5321019, r5321001, MPFR_RNDN);
        mpfr_log(r5321020, r5321019, MPFR_RNDN);
        mpfr_sub(r5321021, r5321005, r5320999, MPFR_RNDN);
        mpfr_add(r5321022, r5321020, r5321021, MPFR_RNDN);
        if (mpfr_get_si(r5321012, MPFR_RNDN)) { mpfr_set(r5321023, r5321018, MPFR_RNDN); } else { mpfr_set(r5321023, r5321022, MPFR_RNDN); };
        if (mpfr_get_si(r5320997, MPFR_RNDN)) { mpfr_set(r5321024, r5321010, MPFR_RNDN); } else { mpfr_set(r5321024, r5321023, MPFR_RNDN); };
        return mpfr_get_d(r5321024, MPFR_RNDN);
}

static mpfr_t r5321025, r5321026, r5321027, r5321028, r5321029, r5321030, r5321031, r5321032, r5321033, r5321034, r5321035, r5321036, r5321037, r5321038, r5321039, r5321040, r5321041, r5321042, r5321043, r5321044, r5321045, r5321046, r5321047, r5321048, r5321049, r5321050, r5321051, r5321052, r5321053, r5321054;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5321025);
        mpfr_init_set_str(r5321026, "-8.336964433172839e-83", 10, MPFR_RNDN);
        mpfr_init(r5321027);
        mpfr_init(r5321028);
        mpfr_init(r5321029);
        mpfr_init(r5321030);
        mpfr_init(r5321031);
        mpfr_init(r5321032);
        mpfr_init(r5321033);
        mpfr_init(r5321034);
        mpfr_init(r5321035);
        mpfr_init(r5321036);
        mpfr_init(r5321037);
        mpfr_init(r5321038);
        mpfr_init(r5321039);
        mpfr_init(r5321040);
        mpfr_init_set_str(r5321041, "9.15602328414514e-96", 10, MPFR_RNDN);
        mpfr_init(r5321042);
        mpfr_init(r5321043);
        mpfr_init(r5321044);
        mpfr_init(r5321045);
        mpfr_init_set_str(r5321046, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5321047);
        mpfr_init(r5321048);
        mpfr_init(r5321049);
        mpfr_init(r5321050);
        mpfr_init(r5321051);
        mpfr_init(r5321052);
        mpfr_init(r5321053);
        mpfr_init(r5321054);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r5321025, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5321027, mpfr_cmp(r5321025, r5321026) <= 0, MPFR_RNDN);
        mpfr_set_d(r5321028, x, MPFR_RNDN);
        mpfr_sin(r5321029, r5321028, MPFR_RNDN);
        mpfr_cos(r5321030, r5321025, MPFR_RNDN);
        mpfr_mul(r5321031, r5321029, r5321030, MPFR_RNDN);
        mpfr_sqr(r5321032, r5321031, MPFR_RNDN);
        mpfr_cos(r5321033, r5321028, MPFR_RNDN);
        mpfr_sin(r5321034, r5321025, MPFR_RNDN);
        mpfr_mul(r5321035, r5321033, r5321034, MPFR_RNDN);
        mpfr_sqr(r5321036, r5321035, MPFR_RNDN);
        mpfr_sub(r5321037, r5321032, r5321036, MPFR_RNDN);
        mpfr_sub(r5321038, r5321031, r5321035, MPFR_RNDN);
        mpfr_div(r5321039, r5321037, r5321038, MPFR_RNDN);
        mpfr_sub(r5321040, r5321039, r5321029, MPFR_RNDN);
        ;
        mpfr_set_si(r5321042, mpfr_cmp(r5321025, r5321041) <= 0, MPFR_RNDN);
        mpfr_add(r5321043, r5321028, r5321025, MPFR_RNDN);
        mpfr_mul(r5321044, r5321028, r5321025, MPFR_RNDN);
        mpfr_mul(r5321045, r5321043, r5321044, MPFR_RNDN);
        ;
        mpfr_mul(r5321047, r5321045, r5321046, MPFR_RNDN);
        mpfr_sub(r5321048, r5321025, r5321047, MPFR_RNDN);
        mpfr_exp(r5321049, r5321031, MPFR_RNDN);
        mpfr_log(r5321050, r5321049, MPFR_RNDN);
        mpfr_sub(r5321051, r5321035, r5321029, MPFR_RNDN);
        mpfr_add(r5321052, r5321050, r5321051, MPFR_RNDN);
        if (mpfr_get_si(r5321042, MPFR_RNDN)) { mpfr_set(r5321053, r5321048, MPFR_RNDN); } else { mpfr_set(r5321053, r5321052, MPFR_RNDN); };
        if (mpfr_get_si(r5321027, MPFR_RNDN)) { mpfr_set(r5321054, r5321040, MPFR_RNDN); } else { mpfr_set(r5321054, r5321053, MPFR_RNDN); };
        return mpfr_get_d(r5321054, MPFR_RNDN);
}

