#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 r58841 = x;
        float r58842 = eps;
        float r58843 = r58841 + r58842;
        float r58844 = sin(r58843);
        float r58845 = sin(r58841);
        float r58846 = r58844 - r58845;
        return r58846;
}

double f_id(double x, double eps) {
        double r58847 = x;
        double r58848 = eps;
        double r58849 = r58847 + r58848;
        double r58850 = sin(r58849);
        double r58851 = sin(r58847);
        double r58852 = r58850 - r58851;
        return r58852;
}


double f_of(float x, float eps) {
        float r58853 = eps;
        float r58854 = -9.473127049996519e-09;
        bool r58855 = r58853 <= r58854;
        float r58856 = x;
        float r58857 = sin(r58856);
        float r58858 = cos(r58853);
        float r58859 = r58857 * r58858;
        float r58860 = cos(r58856);
        float r58861 = sin(r58853);
        float r58862 = r58860 * r58861;
        float r58863 = r58862 - r58857;
        float r58864 = r58859 + r58863;
        float r58865 = 1.3414614579139239e-08;
        bool r58866 = r58853 <= r58865;
        float r58867 = 2;
        float r58868 = r58853 / r58867;
        float r58869 = sin(r58868);
        float r58870 = r58856 + r58856;
        float r58871 = r58853 + r58870;
        float r58872 = r58871 / r58867;
        float r58873 = cos(r58872);
        float r58874 = r58869 * r58873;
        float r58875 = r58867 * r58874;
        float r58876 = r58866 ? r58875 : r58864;
        float r58877 = r58855 ? r58864 : r58876;
        return r58877;
}

double f_od(double x, double eps) {
        double r58878 = eps;
        double r58879 = -9.473127049996519e-09;
        bool r58880 = r58878 <= r58879;
        double r58881 = x;
        double r58882 = sin(r58881);
        double r58883 = cos(r58878);
        double r58884 = r58882 * r58883;
        double r58885 = cos(r58881);
        double r58886 = sin(r58878);
        double r58887 = r58885 * r58886;
        double r58888 = r58887 - r58882;
        double r58889 = r58884 + r58888;
        double r58890 = 1.3414614579139239e-08;
        bool r58891 = r58878 <= r58890;
        double r58892 = 2;
        double r58893 = r58878 / r58892;
        double r58894 = sin(r58893);
        double r58895 = r58881 + r58881;
        double r58896 = r58878 + r58895;
        double r58897 = r58896 / r58892;
        double r58898 = cos(r58897);
        double r58899 = r58894 * r58898;
        double r58900 = r58892 * r58899;
        double r58901 = r58891 ? r58900 : r58889;
        double r58902 = r58880 ? r58889 : r58901;
        return r58902;
}

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 r58903, r58904, r58905, r58906, r58907, r58908;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58903);
        mpfr_init(r58904);
        mpfr_init(r58905);
        mpfr_init(r58906);
        mpfr_init(r58907);
        mpfr_init(r58908);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58903, x, MPFR_RNDN);
        mpfr_set_d(r58904, eps, MPFR_RNDN);
        mpfr_add(r58905, r58903, r58904, MPFR_RNDN);
        mpfr_sin(r58906, r58905, MPFR_RNDN);
        mpfr_sin(r58907, r58903, MPFR_RNDN);
        mpfr_sub(r58908, r58906, r58907, MPFR_RNDN);
        return mpfr_get_d(r58908, MPFR_RNDN);
}

static mpfr_t r58909, r58910, r58911, r58912, r58913, r58914, r58915, r58916, r58917, r58918, r58919, r58920, r58921, r58922, r58923, r58924, r58925, r58926, r58927, r58928, r58929, r58930, r58931, r58932, r58933;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58909);
        mpfr_init_set_str(r58910, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r58911);
        mpfr_init(r58912);
        mpfr_init(r58913);
        mpfr_init(r58914);
        mpfr_init(r58915);
        mpfr_init(r58916);
        mpfr_init(r58917);
        mpfr_init(r58918);
        mpfr_init(r58919);
        mpfr_init(r58920);
        mpfr_init_set_str(r58921, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r58922);
        mpfr_init_set_str(r58923, "2", 10, MPFR_RNDN);
        mpfr_init(r58924);
        mpfr_init(r58925);
        mpfr_init(r58926);
        mpfr_init(r58927);
        mpfr_init(r58928);
        mpfr_init(r58929);
        mpfr_init(r58930);
        mpfr_init(r58931);
        mpfr_init(r58932);
        mpfr_init(r58933);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58909, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58911, mpfr_cmp(r58909, r58910) <= 0, MPFR_RNDN);
        mpfr_set_d(r58912, x, MPFR_RNDN);
        mpfr_sin(r58913, r58912, MPFR_RNDN);
        mpfr_cos(r58914, r58909, MPFR_RNDN);
        mpfr_mul(r58915, r58913, r58914, MPFR_RNDN);
        mpfr_cos(r58916, r58912, MPFR_RNDN);
        mpfr_sin(r58917, r58909, MPFR_RNDN);
        mpfr_mul(r58918, r58916, r58917, MPFR_RNDN);
        mpfr_sub(r58919, r58918, r58913, MPFR_RNDN);
        mpfr_add(r58920, r58915, r58919, MPFR_RNDN);
        ;
        mpfr_set_si(r58922, mpfr_cmp(r58909, r58921) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58924, r58909, r58923, MPFR_RNDN);
        mpfr_sin(r58925, r58924, MPFR_RNDN);
        mpfr_add(r58926, r58912, r58912, MPFR_RNDN);
        mpfr_add(r58927, r58909, r58926, MPFR_RNDN);
        mpfr_div(r58928, r58927, r58923, MPFR_RNDN);
        mpfr_cos(r58929, r58928, MPFR_RNDN);
        mpfr_mul(r58930, r58925, r58929, MPFR_RNDN);
        mpfr_mul(r58931, r58923, r58930, MPFR_RNDN);
        if (mpfr_get_si(r58922, MPFR_RNDN)) { mpfr_set(r58932, r58931, MPFR_RNDN); } else { mpfr_set(r58932, r58920, MPFR_RNDN); };
        if (mpfr_get_si(r58911, MPFR_RNDN)) { mpfr_set(r58933, r58920, MPFR_RNDN); } else { mpfr_set(r58933, r58932, MPFR_RNDN); };
        return mpfr_get_d(r58933, MPFR_RNDN);
}

static mpfr_t r58934, r58935, r58936, r58937, r58938, r58939, r58940, r58941, r58942, r58943, r58944, r58945, r58946, r58947, r58948, r58949, r58950, r58951, r58952, r58953, r58954, r58955, r58956, r58957, r58958;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58934);
        mpfr_init_set_str(r58935, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r58936);
        mpfr_init(r58937);
        mpfr_init(r58938);
        mpfr_init(r58939);
        mpfr_init(r58940);
        mpfr_init(r58941);
        mpfr_init(r58942);
        mpfr_init(r58943);
        mpfr_init(r58944);
        mpfr_init(r58945);
        mpfr_init_set_str(r58946, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r58947);
        mpfr_init_set_str(r58948, "2", 10, MPFR_RNDN);
        mpfr_init(r58949);
        mpfr_init(r58950);
        mpfr_init(r58951);
        mpfr_init(r58952);
        mpfr_init(r58953);
        mpfr_init(r58954);
        mpfr_init(r58955);
        mpfr_init(r58956);
        mpfr_init(r58957);
        mpfr_init(r58958);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58934, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58936, mpfr_cmp(r58934, r58935) <= 0, MPFR_RNDN);
        mpfr_set_d(r58937, x, MPFR_RNDN);
        mpfr_sin(r58938, r58937, MPFR_RNDN);
        mpfr_cos(r58939, r58934, MPFR_RNDN);
        mpfr_mul(r58940, r58938, r58939, MPFR_RNDN);
        mpfr_cos(r58941, r58937, MPFR_RNDN);
        mpfr_sin(r58942, r58934, MPFR_RNDN);
        mpfr_mul(r58943, r58941, r58942, MPFR_RNDN);
        mpfr_sub(r58944, r58943, r58938, MPFR_RNDN);
        mpfr_add(r58945, r58940, r58944, MPFR_RNDN);
        ;
        mpfr_set_si(r58947, mpfr_cmp(r58934, r58946) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58949, r58934, r58948, MPFR_RNDN);
        mpfr_sin(r58950, r58949, MPFR_RNDN);
        mpfr_add(r58951, r58937, r58937, MPFR_RNDN);
        mpfr_add(r58952, r58934, r58951, MPFR_RNDN);
        mpfr_div(r58953, r58952, r58948, MPFR_RNDN);
        mpfr_cos(r58954, r58953, MPFR_RNDN);
        mpfr_mul(r58955, r58950, r58954, MPFR_RNDN);
        mpfr_mul(r58956, r58948, r58955, MPFR_RNDN);
        if (mpfr_get_si(r58947, MPFR_RNDN)) { mpfr_set(r58957, r58956, MPFR_RNDN); } else { mpfr_set(r58957, r58945, MPFR_RNDN); };
        if (mpfr_get_si(r58936, MPFR_RNDN)) { mpfr_set(r58958, r58945, MPFR_RNDN); } else { mpfr_set(r58958, r58957, MPFR_RNDN); };
        return mpfr_get_d(r58958, MPFR_RNDN);
}

