#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 r10918 = x;
        float r10919 = eps;
        float r10920 = r10918 + r10919;
        float r10921 = sin(r10920);
        float r10922 = sin(r10918);
        float r10923 = r10921 - r10922;
        return r10923;
}

double f_id(double x, double eps) {
        double r10924 = x;
        double r10925 = eps;
        double r10926 = r10924 + r10925;
        double r10927 = sin(r10926);
        double r10928 = sin(r10924);
        double r10929 = r10927 - r10928;
        return r10929;
}


double f_of(float x, float eps) {
        float r10930 = x;
        float r10931 = cos(r10930);
        float r10932 = eps;
        float r10933 = sin(r10932);
        float r10934 = r10931 * r10933;
        float r10935 = cos(r10932);
        float r10936 = sin(r10930);
        float r10937 = r10935 * r10936;
        float r10938 = r10934 + r10937;
        float r10939 = r10938 - r10936;
        float r10940 = -1.6915708892359258e-06f;
        bool r10941 = r10939 <= r10940;
        float r10942 = r10934 - r10936;
        float r10943 = r10942 + r10937;
        float r10944 = 3.097729881299127e-07f;
        bool r10945 = r10939 <= r10944;
        float r10946 = 2.0f;
        float r10947 = r10932 / r10946;
        float r10948 = sin(r10947);
        float r10949 = r10930 + r10930;
        float r10950 = r10932 + r10949;
        float r10951 = r10950 / r10946;
        float r10952 = cos(r10951);
        float r10953 = r10948 * r10952;
        float r10954 = r10946 * r10953;
        float r10955 = r10945 ? r10954 : r10939;
        float r10956 = r10941 ? r10943 : r10955;
        return r10956;
}

double f_od(double x, double eps) {
        double r10957 = x;
        double r10958 = cos(r10957);
        double r10959 = eps;
        double r10960 = sin(r10959);
        double r10961 = r10958 * r10960;
        double r10962 = cos(r10959);
        double r10963 = sin(r10957);
        double r10964 = r10962 * r10963;
        double r10965 = r10961 + r10964;
        double r10966 = r10965 - r10963;
        double r10967 = -1.6915708892359258e-06;
        bool r10968 = r10966 <= r10967;
        double r10969 = r10961 - r10963;
        double r10970 = r10969 + r10964;
        double r10971 = 3.097729881299127e-07;
        bool r10972 = r10966 <= r10971;
        double r10973 = 2.0;
        double r10974 = r10959 / r10973;
        double r10975 = sin(r10974);
        double r10976 = r10957 + r10957;
        double r10977 = r10959 + r10976;
        double r10978 = r10977 / r10973;
        double r10979 = cos(r10978);
        double r10980 = r10975 * r10979;
        double r10981 = r10973 * r10980;
        double r10982 = r10972 ? r10981 : r10966;
        double r10983 = r10968 ? r10970 : r10982;
        return r10983;
}

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 r10984, r10985, r10986, r10987, r10988, r10989;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10984);
        mpfr_init(r10985);
        mpfr_init(r10986);
        mpfr_init(r10987);
        mpfr_init(r10988);
        mpfr_init(r10989);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10984, x, MPFR_RNDN);
        mpfr_set_d(r10985, eps, MPFR_RNDN);
        mpfr_add(r10986, r10984, r10985, MPFR_RNDN);
        mpfr_sin(r10987, r10986, MPFR_RNDN);
        mpfr_sin(r10988, r10984, MPFR_RNDN);
        mpfr_sub(r10989, r10987, r10988, MPFR_RNDN);
        return mpfr_get_d(r10989, MPFR_RNDN);
}

static mpfr_t r10990, r10991, r10992, r10993, r10994, r10995, r10996, r10997, r10998, r10999, r11000, r11001, r11002, r11003, r11004, r11005, r11006, r11007, r11008, r11009, r11010, r11011, r11012, r11013, r11014, r11015, r11016;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10990);
        mpfr_init(r10991);
        mpfr_init(r10992);
        mpfr_init(r10993);
        mpfr_init(r10994);
        mpfr_init(r10995);
        mpfr_init(r10996);
        mpfr_init(r10997);
        mpfr_init(r10998);
        mpfr_init(r10999);
        mpfr_init_set_str(r11000, "-1.6915708892359258e-06", 10, MPFR_RNDN);
        mpfr_init(r11001);
        mpfr_init(r11002);
        mpfr_init(r11003);
        mpfr_init_set_str(r11004, "3.097729881299127e-07", 10, MPFR_RNDN);
        mpfr_init(r11005);
        mpfr_init_set_str(r11006, "2", 10, MPFR_RNDN);
        mpfr_init(r11007);
        mpfr_init(r11008);
        mpfr_init(r11009);
        mpfr_init(r11010);
        mpfr_init(r11011);
        mpfr_init(r11012);
        mpfr_init(r11013);
        mpfr_init(r11014);
        mpfr_init(r11015);
        mpfr_init(r11016);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10990, x, MPFR_RNDN);
        mpfr_cos(r10991, r10990, MPFR_RNDN);
        mpfr_set_d(r10992, eps, MPFR_RNDN);
        mpfr_sin(r10993, r10992, MPFR_RNDN);
        mpfr_mul(r10994, r10991, r10993, MPFR_RNDN);
        mpfr_cos(r10995, r10992, MPFR_RNDN);
        mpfr_sin(r10996, r10990, MPFR_RNDN);
        mpfr_mul(r10997, r10995, r10996, MPFR_RNDN);
        mpfr_add(r10998, r10994, r10997, MPFR_RNDN);
        mpfr_sub(r10999, r10998, r10996, MPFR_RNDN);
        ;
        mpfr_set_si(r11001, mpfr_cmp(r10999, r11000) <= 0, MPFR_RNDN);
        mpfr_sub(r11002, r10994, r10996, MPFR_RNDN);
        mpfr_add(r11003, r11002, r10997, MPFR_RNDN);
        ;
        mpfr_set_si(r11005, mpfr_cmp(r10999, r11004) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r11007, r10992, r11006, MPFR_RNDN);
        mpfr_sin(r11008, r11007, MPFR_RNDN);
        mpfr_add(r11009, r10990, r10990, MPFR_RNDN);
        mpfr_add(r11010, r10992, r11009, MPFR_RNDN);
        mpfr_div(r11011, r11010, r11006, MPFR_RNDN);
        mpfr_cos(r11012, r11011, MPFR_RNDN);
        mpfr_mul(r11013, r11008, r11012, MPFR_RNDN);
        mpfr_mul(r11014, r11006, r11013, MPFR_RNDN);
        if (mpfr_get_si(r11005, MPFR_RNDN)) { mpfr_set(r11015, r11014, MPFR_RNDN); } else { mpfr_set(r11015, r10999, MPFR_RNDN); };
        if (mpfr_get_si(r11001, MPFR_RNDN)) { mpfr_set(r11016, r11003, MPFR_RNDN); } else { mpfr_set(r11016, r11015, MPFR_RNDN); };
        return mpfr_get_d(r11016, MPFR_RNDN);
}

static mpfr_t r11017, r11018, r11019, r11020, r11021, r11022, r11023, r11024, r11025, r11026, r11027, r11028, r11029, r11030, r11031, r11032, r11033, r11034, r11035, r11036, r11037, r11038, r11039, r11040, r11041, r11042, r11043;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11017);
        mpfr_init(r11018);
        mpfr_init(r11019);
        mpfr_init(r11020);
        mpfr_init(r11021);
        mpfr_init(r11022);
        mpfr_init(r11023);
        mpfr_init(r11024);
        mpfr_init(r11025);
        mpfr_init(r11026);
        mpfr_init_set_str(r11027, "-1.6915708892359258e-06", 10, MPFR_RNDN);
        mpfr_init(r11028);
        mpfr_init(r11029);
        mpfr_init(r11030);
        mpfr_init_set_str(r11031, "3.097729881299127e-07", 10, MPFR_RNDN);
        mpfr_init(r11032);
        mpfr_init_set_str(r11033, "2", 10, MPFR_RNDN);
        mpfr_init(r11034);
        mpfr_init(r11035);
        mpfr_init(r11036);
        mpfr_init(r11037);
        mpfr_init(r11038);
        mpfr_init(r11039);
        mpfr_init(r11040);
        mpfr_init(r11041);
        mpfr_init(r11042);
        mpfr_init(r11043);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11017, x, MPFR_RNDN);
        mpfr_cos(r11018, r11017, MPFR_RNDN);
        mpfr_set_d(r11019, eps, MPFR_RNDN);
        mpfr_sin(r11020, r11019, MPFR_RNDN);
        mpfr_mul(r11021, r11018, r11020, MPFR_RNDN);
        mpfr_cos(r11022, r11019, MPFR_RNDN);
        mpfr_sin(r11023, r11017, MPFR_RNDN);
        mpfr_mul(r11024, r11022, r11023, MPFR_RNDN);
        mpfr_add(r11025, r11021, r11024, MPFR_RNDN);
        mpfr_sub(r11026, r11025, r11023, MPFR_RNDN);
        ;
        mpfr_set_si(r11028, mpfr_cmp(r11026, r11027) <= 0, MPFR_RNDN);
        mpfr_sub(r11029, r11021, r11023, MPFR_RNDN);
        mpfr_add(r11030, r11029, r11024, MPFR_RNDN);
        ;
        mpfr_set_si(r11032, mpfr_cmp(r11026, r11031) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r11034, r11019, r11033, MPFR_RNDN);
        mpfr_sin(r11035, r11034, MPFR_RNDN);
        mpfr_add(r11036, r11017, r11017, MPFR_RNDN);
        mpfr_add(r11037, r11019, r11036, MPFR_RNDN);
        mpfr_div(r11038, r11037, r11033, MPFR_RNDN);
        mpfr_cos(r11039, r11038, MPFR_RNDN);
        mpfr_mul(r11040, r11035, r11039, MPFR_RNDN);
        mpfr_mul(r11041, r11033, r11040, MPFR_RNDN);
        if (mpfr_get_si(r11032, MPFR_RNDN)) { mpfr_set(r11042, r11041, MPFR_RNDN); } else { mpfr_set(r11042, r11026, MPFR_RNDN); };
        if (mpfr_get_si(r11028, MPFR_RNDN)) { mpfr_set(r11043, r11030, MPFR_RNDN); } else { mpfr_set(r11043, r11042, MPFR_RNDN); };
        return mpfr_get_d(r11043, MPFR_RNDN);
}

