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

char *name = "2sin (example 3.3)";

double f_if(float x, float eps) {
        float r58919 = x;
        float r58920 = eps;
        float r58921 = r58919 + r58920;
        float r58922 = sin(r58921);
        float r58923 = sin(r58919);
        float r58924 = r58922 - r58923;
        return r58924;
}

double f_id(double x, double eps) {
        double r58925 = x;
        double r58926 = eps;
        double r58927 = r58925 + r58926;
        double r58928 = sin(r58927);
        double r58929 = sin(r58925);
        double r58930 = r58928 - r58929;
        return r58930;
}


double f_of(float x, float eps) {
        float r58931 = eps;
        float r58932 = -9.473127049996519e-09;
        bool r58933 = r58931 <= r58932;
        float r58934 = x;
        float r58935 = sin(r58934);
        float r58936 = cos(r58931);
        float r58937 = r58935 * r58936;
        float r58938 = cos(r58934);
        float r58939 = sin(r58931);
        float r58940 = r58938 * r58939;
        float r58941 = r58940 - r58935;
        float r58942 = r58937 + r58941;
        float r58943 = 1.3414614579139239e-08;
        bool r58944 = r58931 <= r58943;
        float r58945 = 2;
        float r58946 = r58931 / r58945;
        float r58947 = sin(r58946);
        float r58948 = r58934 + r58934;
        float r58949 = r58931 + r58948;
        float r58950 = r58949 / r58945;
        float r58951 = cos(r58950);
        float r58952 = r58947 * r58951;
        float r58953 = r58945 * r58952;
        float r58954 = r58944 ? r58953 : r58942;
        float r58955 = r58933 ? r58942 : r58954;
        return r58955;
}

double f_od(double x, double eps) {
        double r58956 = eps;
        double r58957 = -9.473127049996519e-09;
        bool r58958 = r58956 <= r58957;
        double r58959 = x;
        double r58960 = sin(r58959);
        double r58961 = cos(r58956);
        double r58962 = r58960 * r58961;
        double r58963 = cos(r58959);
        double r58964 = sin(r58956);
        double r58965 = r58963 * r58964;
        double r58966 = r58965 - r58960;
        double r58967 = r58962 + r58966;
        double r58968 = 1.3414614579139239e-08;
        bool r58969 = r58956 <= r58968;
        double r58970 = 2;
        double r58971 = r58956 / r58970;
        double r58972 = sin(r58971);
        double r58973 = r58959 + r58959;
        double r58974 = r58956 + r58973;
        double r58975 = r58974 / r58970;
        double r58976 = cos(r58975);
        double r58977 = r58972 * r58976;
        double r58978 = r58970 * r58977;
        double r58979 = r58969 ? r58978 : r58967;
        double r58980 = r58958 ? r58967 : r58979;
        return r58980;
}

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 r58981, r58982, r58983, r58984, r58985, r58986;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58981);
        mpfr_init(r58982);
        mpfr_init(r58983);
        mpfr_init(r58984);
        mpfr_init(r58985);
        mpfr_init(r58986);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58981, x, MPFR_RNDN);
        mpfr_set_d(r58982, eps, MPFR_RNDN);
        mpfr_add(r58983, r58981, r58982, MPFR_RNDN);
        mpfr_sin(r58984, r58983, MPFR_RNDN);
        mpfr_sin(r58985, r58981, MPFR_RNDN);
        mpfr_sub(r58986, r58984, r58985, MPFR_RNDN);
        return mpfr_get_d(r58986, MPFR_RNDN);
}

static mpfr_t r58987, r58988, r58989, r58990, r58991, r58992, r58993, r58994, r58995, r58996, r58997, r58998, r58999, r59000, r59001, r59002, r59003, r59004, r59005, r59006, r59007, r59008, r59009, r59010, r59011;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58987);
        mpfr_init_set_str(r58988, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r58989);
        mpfr_init(r58990);
        mpfr_init(r58991);
        mpfr_init(r58992);
        mpfr_init(r58993);
        mpfr_init(r58994);
        mpfr_init(r58995);
        mpfr_init(r58996);
        mpfr_init(r58997);
        mpfr_init(r58998);
        mpfr_init_set_str(r58999, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r59000);
        mpfr_init_set_str(r59001, "2", 10, MPFR_RNDN);
        mpfr_init(r59002);
        mpfr_init(r59003);
        mpfr_init(r59004);
        mpfr_init(r59005);
        mpfr_init(r59006);
        mpfr_init(r59007);
        mpfr_init(r59008);
        mpfr_init(r59009);
        mpfr_init(r59010);
        mpfr_init(r59011);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58987, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58989, mpfr_cmp(r58987, r58988) <= 0, MPFR_RNDN);
        mpfr_set_d(r58990, x, MPFR_RNDN);
        mpfr_sin(r58991, r58990, MPFR_RNDN);
        mpfr_cos(r58992, r58987, MPFR_RNDN);
        mpfr_mul(r58993, r58991, r58992, MPFR_RNDN);
        mpfr_cos(r58994, r58990, MPFR_RNDN);
        mpfr_sin(r58995, r58987, MPFR_RNDN);
        mpfr_mul(r58996, r58994, r58995, MPFR_RNDN);
        mpfr_sub(r58997, r58996, r58991, MPFR_RNDN);
        mpfr_add(r58998, r58993, r58997, MPFR_RNDN);
        ;
        mpfr_set_si(r59000, mpfr_cmp(r58987, r58999) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r59002, r58987, r59001, MPFR_RNDN);
        mpfr_sin(r59003, r59002, MPFR_RNDN);
        mpfr_add(r59004, r58990, r58990, MPFR_RNDN);
        mpfr_add(r59005, r58987, r59004, MPFR_RNDN);
        mpfr_div(r59006, r59005, r59001, MPFR_RNDN);
        mpfr_cos(r59007, r59006, MPFR_RNDN);
        mpfr_mul(r59008, r59003, r59007, MPFR_RNDN);
        mpfr_mul(r59009, r59001, r59008, MPFR_RNDN);
        if (mpfr_get_si(r59000, MPFR_RNDN)) { mpfr_set(r59010, r59009, MPFR_RNDN); } else { mpfr_set(r59010, r58998, MPFR_RNDN); };
        if (mpfr_get_si(r58989, MPFR_RNDN)) { mpfr_set(r59011, r58998, MPFR_RNDN); } else { mpfr_set(r59011, r59010, MPFR_RNDN); };
        return mpfr_get_d(r59011, MPFR_RNDN);
}

static mpfr_t r59012, r59013, r59014, r59015, r59016, r59017, r59018, r59019, r59020, r59021, r59022, r59023, r59024, r59025, r59026, r59027, r59028, r59029, r59030, r59031, r59032, r59033, r59034, r59035, r59036;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r59012);
        mpfr_init_set_str(r59013, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r59014);
        mpfr_init(r59015);
        mpfr_init(r59016);
        mpfr_init(r59017);
        mpfr_init(r59018);
        mpfr_init(r59019);
        mpfr_init(r59020);
        mpfr_init(r59021);
        mpfr_init(r59022);
        mpfr_init(r59023);
        mpfr_init_set_str(r59024, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r59025);
        mpfr_init_set_str(r59026, "2", 10, MPFR_RNDN);
        mpfr_init(r59027);
        mpfr_init(r59028);
        mpfr_init(r59029);
        mpfr_init(r59030);
        mpfr_init(r59031);
        mpfr_init(r59032);
        mpfr_init(r59033);
        mpfr_init(r59034);
        mpfr_init(r59035);
        mpfr_init(r59036);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r59012, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r59014, mpfr_cmp(r59012, r59013) <= 0, MPFR_RNDN);
        mpfr_set_d(r59015, x, MPFR_RNDN);
        mpfr_sin(r59016, r59015, MPFR_RNDN);
        mpfr_cos(r59017, r59012, MPFR_RNDN);
        mpfr_mul(r59018, r59016, r59017, MPFR_RNDN);
        mpfr_cos(r59019, r59015, MPFR_RNDN);
        mpfr_sin(r59020, r59012, MPFR_RNDN);
        mpfr_mul(r59021, r59019, r59020, MPFR_RNDN);
        mpfr_sub(r59022, r59021, r59016, MPFR_RNDN);
        mpfr_add(r59023, r59018, r59022, MPFR_RNDN);
        ;
        mpfr_set_si(r59025, mpfr_cmp(r59012, r59024) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r59027, r59012, r59026, MPFR_RNDN);
        mpfr_sin(r59028, r59027, MPFR_RNDN);
        mpfr_add(r59029, r59015, r59015, MPFR_RNDN);
        mpfr_add(r59030, r59012, r59029, MPFR_RNDN);
        mpfr_div(r59031, r59030, r59026, MPFR_RNDN);
        mpfr_cos(r59032, r59031, MPFR_RNDN);
        mpfr_mul(r59033, r59028, r59032, MPFR_RNDN);
        mpfr_mul(r59034, r59026, r59033, MPFR_RNDN);
        if (mpfr_get_si(r59025, MPFR_RNDN)) { mpfr_set(r59035, r59034, MPFR_RNDN); } else { mpfr_set(r59035, r59023, MPFR_RNDN); };
        if (mpfr_get_si(r59014, MPFR_RNDN)) { mpfr_set(r59036, r59023, MPFR_RNDN); } else { mpfr_set(r59036, r59035, MPFR_RNDN); };
        return mpfr_get_d(r59036, MPFR_RNDN);
}

