#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 r27142 = x;
        float r27143 = eps;
        float r27144 = r27142 + r27143;
        float r27145 = sin(r27144);
        float r27146 = sin(r27142);
        float r27147 = r27145 - r27146;
        return r27147;
}

double f_id(double x, double eps) {
        double r27148 = x;
        double r27149 = eps;
        double r27150 = r27148 + r27149;
        double r27151 = sin(r27150);
        double r27152 = sin(r27148);
        double r27153 = r27151 - r27152;
        return r27153;
}


double f_of(float x, float eps) {
        float r27154 = eps;
        float r27155 = 1/2;
        float r27156 = r27154 * r27155;
        float r27157 = cos(r27156);
        float r27158 = x;
        float r27159 = cos(r27158);
        float r27160 = r27157 * r27159;
        float r27161 = sin(r27156);
        float r27162 = sin(r27158);
        float r27163 = r27161 * r27162;
        float r27164 = exp(r27163);
        float r27165 = log(r27164);
        float r27166 = r27160 - r27165;
        float r27167 = 2;
        float r27168 = r27154 / r27167;
        float r27169 = sin(r27168);
        float r27170 = r27166 * r27169;
        float r27171 = r27170 * r27167;
        return r27171;
}

double f_od(double x, double eps) {
        double r27172 = eps;
        double r27173 = 1/2;
        double r27174 = r27172 * r27173;
        double r27175 = cos(r27174);
        double r27176 = x;
        double r27177 = cos(r27176);
        double r27178 = r27175 * r27177;
        double r27179 = sin(r27174);
        double r27180 = sin(r27176);
        double r27181 = r27179 * r27180;
        double r27182 = exp(r27181);
        double r27183 = log(r27182);
        double r27184 = r27178 - r27183;
        double r27185 = 2;
        double r27186 = r27172 / r27185;
        double r27187 = sin(r27186);
        double r27188 = r27184 * r27187;
        double r27189 = r27188 * r27185;
        return r27189;
}

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 r27190, r27191, r27192, r27193, r27194, r27195;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
        mpfr_init(r27194);
        mpfr_init(r27195);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27190, x, MPFR_RNDN);
        mpfr_set_d(r27191, eps, MPFR_RNDN);
        mpfr_add(r27192, r27190, r27191, MPFR_RNDN);
        mpfr_sin(r27193, r27192, MPFR_RNDN);
        mpfr_sin(r27194, r27190, MPFR_RNDN);
        mpfr_sub(r27195, r27193, r27194, MPFR_RNDN);
        return mpfr_get_d(r27195, MPFR_RNDN);
}

static mpfr_t r27196, r27197, r27198, r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210, r27211, r27212, r27213;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27196);
        mpfr_init_set_str(r27197, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init_set_str(r27209, "2", 10, MPFR_RNDN);
        mpfr_init(r27210);
        mpfr_init(r27211);
        mpfr_init(r27212);
        mpfr_init(r27213);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27196, eps, MPFR_RNDN);
        ;
        mpfr_mul(r27198, r27196, r27197, MPFR_RNDN);
        mpfr_cos(r27199, r27198, MPFR_RNDN);
        mpfr_set_d(r27200, x, MPFR_RNDN);
        mpfr_cos(r27201, r27200, MPFR_RNDN);
        mpfr_mul(r27202, r27199, r27201, MPFR_RNDN);
        mpfr_sin(r27203, r27198, MPFR_RNDN);
        mpfr_sin(r27204, r27200, MPFR_RNDN);
        mpfr_mul(r27205, r27203, r27204, MPFR_RNDN);
        mpfr_exp(r27206, r27205, MPFR_RNDN);
        mpfr_log(r27207, r27206, MPFR_RNDN);
        mpfr_sub(r27208, r27202, r27207, MPFR_RNDN);
        ;
        mpfr_div(r27210, r27196, r27209, MPFR_RNDN);
        mpfr_sin(r27211, r27210, MPFR_RNDN);
        mpfr_mul(r27212, r27208, r27211, MPFR_RNDN);
        mpfr_mul(r27213, r27212, r27209, MPFR_RNDN);
        return mpfr_get_d(r27213, MPFR_RNDN);
}

static mpfr_t r27214, r27215, r27216, r27217, r27218, r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27214);
        mpfr_init_set_str(r27215, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27216);
        mpfr_init(r27217);
        mpfr_init(r27218);
        mpfr_init(r27219);
        mpfr_init(r27220);
        mpfr_init(r27221);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init(r27226);
        mpfr_init_set_str(r27227, "2", 10, MPFR_RNDN);
        mpfr_init(r27228);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init(r27231);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27214, eps, MPFR_RNDN);
        ;
        mpfr_mul(r27216, r27214, r27215, MPFR_RNDN);
        mpfr_cos(r27217, r27216, MPFR_RNDN);
        mpfr_set_d(r27218, x, MPFR_RNDN);
        mpfr_cos(r27219, r27218, MPFR_RNDN);
        mpfr_mul(r27220, r27217, r27219, MPFR_RNDN);
        mpfr_sin(r27221, r27216, MPFR_RNDN);
        mpfr_sin(r27222, r27218, MPFR_RNDN);
        mpfr_mul(r27223, r27221, r27222, MPFR_RNDN);
        mpfr_exp(r27224, r27223, MPFR_RNDN);
        mpfr_log(r27225, r27224, MPFR_RNDN);
        mpfr_sub(r27226, r27220, r27225, MPFR_RNDN);
        ;
        mpfr_div(r27228, r27214, r27227, MPFR_RNDN);
        mpfr_sin(r27229, r27228, MPFR_RNDN);
        mpfr_mul(r27230, r27226, r27229, MPFR_RNDN);
        mpfr_mul(r27231, r27230, r27227, MPFR_RNDN);
        return mpfr_get_d(r27231, MPFR_RNDN);
}

