#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 r11137 = x;
        float r11138 = eps;
        float r11139 = r11137 + r11138;
        float r11140 = sin(r11139);
        float r11141 = sin(r11137);
        float r11142 = r11140 - r11141;
        return r11142;
}

double f_id(double x, double eps) {
        double r11143 = x;
        double r11144 = eps;
        double r11145 = r11143 + r11144;
        double r11146 = sin(r11145);
        double r11147 = sin(r11143);
        double r11148 = r11146 - r11147;
        return r11148;
}


double f_of(float x, float eps) {
        float r11149 = 2;
        float r11150 = x;
        float r11151 = cos(r11150);
        float r11152 = 1/2;
        float r11153 = eps;
        float r11154 = r11152 * r11153;
        float r11155 = cos(r11154);
        float r11156 = r11151 * r11155;
        float r11157 = sin(r11150);
        float r11158 = sin(r11154);
        float r11159 = r11157 * r11158;
        float r11160 = 3;
        float r11161 = pow(r11159, r11160);
        float r11162 = cbrt(r11161);
        float r11163 = r11156 - r11162;
        float r11164 = r11153 / r11149;
        float r11165 = sin(r11164);
        float r11166 = r11163 * r11165;
        float r11167 = r11149 * r11166;
        return r11167;
}

double f_od(double x, double eps) {
        double r11168 = 2;
        double r11169 = x;
        double r11170 = cos(r11169);
        double r11171 = 1/2;
        double r11172 = eps;
        double r11173 = r11171 * r11172;
        double r11174 = cos(r11173);
        double r11175 = r11170 * r11174;
        double r11176 = sin(r11169);
        double r11177 = sin(r11173);
        double r11178 = r11176 * r11177;
        double r11179 = 3;
        double r11180 = pow(r11178, r11179);
        double r11181 = cbrt(r11180);
        double r11182 = r11175 - r11181;
        double r11183 = r11172 / r11168;
        double r11184 = sin(r11183);
        double r11185 = r11182 * r11184;
        double r11186 = r11168 * r11185;
        return r11186;
}

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 r11187, r11188, r11189, r11190, r11191, r11192;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11187);
        mpfr_init(r11188);
        mpfr_init(r11189);
        mpfr_init(r11190);
        mpfr_init(r11191);
        mpfr_init(r11192);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11187, x, MPFR_RNDN);
        mpfr_set_d(r11188, eps, MPFR_RNDN);
        mpfr_add(r11189, r11187, r11188, MPFR_RNDN);
        mpfr_sin(r11190, r11189, MPFR_RNDN);
        mpfr_sin(r11191, r11187, MPFR_RNDN);
        mpfr_sub(r11192, r11190, r11191, MPFR_RNDN);
        return mpfr_get_d(r11192, MPFR_RNDN);
}

static mpfr_t r11193, r11194, r11195, r11196, r11197, r11198, r11199, r11200, r11201, r11202, r11203, r11204, r11205, r11206, r11207, r11208, r11209, r11210, r11211;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r11193, "2", 10, MPFR_RNDN);
        mpfr_init(r11194);
        mpfr_init(r11195);
        mpfr_init_set_str(r11196, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11197);
        mpfr_init(r11198);
        mpfr_init(r11199);
        mpfr_init(r11200);
        mpfr_init(r11201);
        mpfr_init(r11202);
        mpfr_init(r11203);
        mpfr_init_set_str(r11204, "3", 10, MPFR_RNDN);
        mpfr_init(r11205);
        mpfr_init(r11206);
        mpfr_init(r11207);
        mpfr_init(r11208);
        mpfr_init(r11209);
        mpfr_init(r11210);
        mpfr_init(r11211);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r11194, x, MPFR_RNDN);
        mpfr_cos(r11195, r11194, MPFR_RNDN);
        ;
        mpfr_set_d(r11197, eps, MPFR_RNDN);
        mpfr_mul(r11198, r11196, r11197, MPFR_RNDN);
        mpfr_cos(r11199, r11198, MPFR_RNDN);
        mpfr_mul(r11200, r11195, r11199, MPFR_RNDN);
        mpfr_sin(r11201, r11194, MPFR_RNDN);
        mpfr_sin(r11202, r11198, MPFR_RNDN);
        mpfr_mul(r11203, r11201, r11202, MPFR_RNDN);
        ;
        mpfr_pow(r11205, r11203, r11204, MPFR_RNDN);
        mpfr_cbrt(r11206, r11205, MPFR_RNDN);
        mpfr_sub(r11207, r11200, r11206, MPFR_RNDN);
        mpfr_div(r11208, r11197, r11193, MPFR_RNDN);
        mpfr_sin(r11209, r11208, MPFR_RNDN);
        mpfr_mul(r11210, r11207, r11209, MPFR_RNDN);
        mpfr_mul(r11211, r11193, r11210, MPFR_RNDN);
        return mpfr_get_d(r11211, MPFR_RNDN);
}

static mpfr_t r11212, r11213, r11214, r11215, r11216, r11217, r11218, r11219, r11220, r11221, r11222, r11223, r11224, r11225, r11226, r11227, r11228, r11229, r11230;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r11212, "2", 10, MPFR_RNDN);
        mpfr_init(r11213);
        mpfr_init(r11214);
        mpfr_init_set_str(r11215, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11216);
        mpfr_init(r11217);
        mpfr_init(r11218);
        mpfr_init(r11219);
        mpfr_init(r11220);
        mpfr_init(r11221);
        mpfr_init(r11222);
        mpfr_init_set_str(r11223, "3", 10, MPFR_RNDN);
        mpfr_init(r11224);
        mpfr_init(r11225);
        mpfr_init(r11226);
        mpfr_init(r11227);
        mpfr_init(r11228);
        mpfr_init(r11229);
        mpfr_init(r11230);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r11213, x, MPFR_RNDN);
        mpfr_cos(r11214, r11213, MPFR_RNDN);
        ;
        mpfr_set_d(r11216, eps, MPFR_RNDN);
        mpfr_mul(r11217, r11215, r11216, MPFR_RNDN);
        mpfr_cos(r11218, r11217, MPFR_RNDN);
        mpfr_mul(r11219, r11214, r11218, MPFR_RNDN);
        mpfr_sin(r11220, r11213, MPFR_RNDN);
        mpfr_sin(r11221, r11217, MPFR_RNDN);
        mpfr_mul(r11222, r11220, r11221, MPFR_RNDN);
        ;
        mpfr_pow(r11224, r11222, r11223, MPFR_RNDN);
        mpfr_cbrt(r11225, r11224, MPFR_RNDN);
        mpfr_sub(r11226, r11219, r11225, MPFR_RNDN);
        mpfr_div(r11227, r11216, r11212, MPFR_RNDN);
        mpfr_sin(r11228, r11227, MPFR_RNDN);
        mpfr_mul(r11229, r11226, r11228, MPFR_RNDN);
        mpfr_mul(r11230, r11212, r11229, MPFR_RNDN);
        return mpfr_get_d(r11230, MPFR_RNDN);
}

