#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 r11306 = x;
        float r11307 = eps;
        float r11308 = r11306 + r11307;
        float r11309 = sin(r11308);
        float r11310 = sin(r11306);
        float r11311 = r11309 - r11310;
        return r11311;
}

double f_id(double x, double eps) {
        double r11312 = x;
        double r11313 = eps;
        double r11314 = r11312 + r11313;
        double r11315 = sin(r11314);
        double r11316 = sin(r11312);
        double r11317 = r11315 - r11316;
        return r11317;
}


double f_of(float x, float eps) {
        float r11318 = eps;
        float r11319 = -4.702463674507346e-06;
        bool r11320 = r11318 <= r11319;
        float r11321 = x;
        float r11322 = sin(r11321);
        float r11323 = cos(r11318);
        float r11324 = r11322 * r11323;
        float r11325 = cos(r11321);
        float r11326 = sin(r11318);
        float r11327 = r11325 * r11326;
        float r11328 = r11327 - r11322;
        float r11329 = r11324 + r11328;
        float r11330 = 6.677242975028955e-09;
        bool r11331 = r11318 <= r11330;
        float r11332 = 2;
        float r11333 = r11321 + r11321;
        float r11334 = r11318 + r11333;
        float r11335 = r11334 / r11332;
        float r11336 = cos(r11335);
        float r11337 = log1p(r11336);
        float r11338 = expm1(r11337);
        float r11339 = r11318 / r11332;
        float r11340 = sin(r11339);
        float r11341 = r11338 * r11340;
        float r11342 = r11332 * r11341;
        float r11343 = r11324 + r11327;
        float r11344 = r11343 - r11322;
        float r11345 = r11331 ? r11342 : r11344;
        float r11346 = r11320 ? r11329 : r11345;
        return r11346;
}

double f_od(double x, double eps) {
        double r11347 = eps;
        double r11348 = -4.702463674507346e-06;
        bool r11349 = r11347 <= r11348;
        double r11350 = x;
        double r11351 = sin(r11350);
        double r11352 = cos(r11347);
        double r11353 = r11351 * r11352;
        double r11354 = cos(r11350);
        double r11355 = sin(r11347);
        double r11356 = r11354 * r11355;
        double r11357 = r11356 - r11351;
        double r11358 = r11353 + r11357;
        double r11359 = 6.677242975028955e-09;
        bool r11360 = r11347 <= r11359;
        double r11361 = 2;
        double r11362 = r11350 + r11350;
        double r11363 = r11347 + r11362;
        double r11364 = r11363 / r11361;
        double r11365 = cos(r11364);
        double r11366 = log1p(r11365);
        double r11367 = expm1(r11366);
        double r11368 = r11347 / r11361;
        double r11369 = sin(r11368);
        double r11370 = r11367 * r11369;
        double r11371 = r11361 * r11370;
        double r11372 = r11353 + r11356;
        double r11373 = r11372 - r11351;
        double r11374 = r11360 ? r11371 : r11373;
        double r11375 = r11349 ? r11358 : r11374;
        return r11375;
}

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 r11376, r11377, r11378, r11379, r11380, r11381;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11376);
        mpfr_init(r11377);
        mpfr_init(r11378);
        mpfr_init(r11379);
        mpfr_init(r11380);
        mpfr_init(r11381);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11376, x, MPFR_RNDN);
        mpfr_set_d(r11377, eps, MPFR_RNDN);
        mpfr_add(r11378, r11376, r11377, MPFR_RNDN);
        mpfr_sin(r11379, r11378, MPFR_RNDN);
        mpfr_sin(r11380, r11376, MPFR_RNDN);
        mpfr_sub(r11381, r11379, r11380, MPFR_RNDN);
        return mpfr_get_d(r11381, MPFR_RNDN);
}

static mpfr_t r11382, r11383, r11384, r11385, r11386, r11387, r11388, r11389, r11390, r11391, r11392, r11393, r11394, r11395, r11396, r11397, r11398, r11399, r11400, r11401, r11402, r11403, r11404, r11405, r11406, r11407, r11408, r11409, r11410;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11382);
        mpfr_init_set_str(r11383, "-4.702463674507346e-06", 10, MPFR_RNDN);
        mpfr_init(r11384);
        mpfr_init(r11385);
        mpfr_init(r11386);
        mpfr_init(r11387);
        mpfr_init(r11388);
        mpfr_init(r11389);
        mpfr_init(r11390);
        mpfr_init(r11391);
        mpfr_init(r11392);
        mpfr_init(r11393);
        mpfr_init_set_str(r11394, "6.677242975028955e-09", 10, MPFR_RNDN);
        mpfr_init(r11395);
        mpfr_init_set_str(r11396, "2", 10, MPFR_RNDN);
        mpfr_init(r11397);
        mpfr_init(r11398);
        mpfr_init(r11399);
        mpfr_init(r11400);
        mpfr_init(r11401);
        mpfr_init(r11402);
        mpfr_init(r11403);
        mpfr_init(r11404);
        mpfr_init(r11405);
        mpfr_init(r11406);
        mpfr_init(r11407);
        mpfr_init(r11408);
        mpfr_init(r11409);
        mpfr_init(r11410);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11382, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r11384, mpfr_cmp(r11382, r11383) <= 0, MPFR_RNDN);
        mpfr_set_d(r11385, x, MPFR_RNDN);
        mpfr_sin(r11386, r11385, MPFR_RNDN);
        mpfr_cos(r11387, r11382, MPFR_RNDN);
        mpfr_mul(r11388, r11386, r11387, MPFR_RNDN);
        mpfr_cos(r11389, r11385, MPFR_RNDN);
        mpfr_sin(r11390, r11382, MPFR_RNDN);
        mpfr_mul(r11391, r11389, r11390, MPFR_RNDN);
        mpfr_sub(r11392, r11391, r11386, MPFR_RNDN);
        mpfr_add(r11393, r11388, r11392, MPFR_RNDN);
        ;
        mpfr_set_si(r11395, mpfr_cmp(r11382, r11394) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r11397, r11385, r11385, MPFR_RNDN);
        mpfr_add(r11398, r11382, r11397, MPFR_RNDN);
        mpfr_div(r11399, r11398, r11396, MPFR_RNDN);
        mpfr_cos(r11400, r11399, MPFR_RNDN);
        mpfr_log1p(r11401, r11400, MPFR_RNDN);
        mpfr_expm1(r11402, r11401, MPFR_RNDN);
        mpfr_div(r11403, r11382, r11396, MPFR_RNDN);
        mpfr_sin(r11404, r11403, MPFR_RNDN);
        mpfr_mul(r11405, r11402, r11404, MPFR_RNDN);
        mpfr_mul(r11406, r11396, r11405, MPFR_RNDN);
        mpfr_add(r11407, r11388, r11391, MPFR_RNDN);
        mpfr_sub(r11408, r11407, r11386, MPFR_RNDN);
        if (mpfr_get_si(r11395, MPFR_RNDN)) { mpfr_set(r11409, r11406, MPFR_RNDN); } else { mpfr_set(r11409, r11408, MPFR_RNDN); };
        if (mpfr_get_si(r11384, MPFR_RNDN)) { mpfr_set(r11410, r11393, MPFR_RNDN); } else { mpfr_set(r11410, r11409, MPFR_RNDN); };
        return mpfr_get_d(r11410, MPFR_RNDN);
}

static mpfr_t r11411, r11412, r11413, r11414, r11415, r11416, r11417, r11418, r11419, r11420, r11421, r11422, r11423, r11424, r11425, r11426, r11427, r11428, r11429, r11430, r11431, r11432, r11433, r11434, r11435, r11436, r11437, r11438, r11439;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11411);
        mpfr_init_set_str(r11412, "-4.702463674507346e-06", 10, MPFR_RNDN);
        mpfr_init(r11413);
        mpfr_init(r11414);
        mpfr_init(r11415);
        mpfr_init(r11416);
        mpfr_init(r11417);
        mpfr_init(r11418);
        mpfr_init(r11419);
        mpfr_init(r11420);
        mpfr_init(r11421);
        mpfr_init(r11422);
        mpfr_init_set_str(r11423, "6.677242975028955e-09", 10, MPFR_RNDN);
        mpfr_init(r11424);
        mpfr_init_set_str(r11425, "2", 10, MPFR_RNDN);
        mpfr_init(r11426);
        mpfr_init(r11427);
        mpfr_init(r11428);
        mpfr_init(r11429);
        mpfr_init(r11430);
        mpfr_init(r11431);
        mpfr_init(r11432);
        mpfr_init(r11433);
        mpfr_init(r11434);
        mpfr_init(r11435);
        mpfr_init(r11436);
        mpfr_init(r11437);
        mpfr_init(r11438);
        mpfr_init(r11439);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11411, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r11413, mpfr_cmp(r11411, r11412) <= 0, MPFR_RNDN);
        mpfr_set_d(r11414, x, MPFR_RNDN);
        mpfr_sin(r11415, r11414, MPFR_RNDN);
        mpfr_cos(r11416, r11411, MPFR_RNDN);
        mpfr_mul(r11417, r11415, r11416, MPFR_RNDN);
        mpfr_cos(r11418, r11414, MPFR_RNDN);
        mpfr_sin(r11419, r11411, MPFR_RNDN);
        mpfr_mul(r11420, r11418, r11419, MPFR_RNDN);
        mpfr_sub(r11421, r11420, r11415, MPFR_RNDN);
        mpfr_add(r11422, r11417, r11421, MPFR_RNDN);
        ;
        mpfr_set_si(r11424, mpfr_cmp(r11411, r11423) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r11426, r11414, r11414, MPFR_RNDN);
        mpfr_add(r11427, r11411, r11426, MPFR_RNDN);
        mpfr_div(r11428, r11427, r11425, MPFR_RNDN);
        mpfr_cos(r11429, r11428, MPFR_RNDN);
        mpfr_log1p(r11430, r11429, MPFR_RNDN);
        mpfr_expm1(r11431, r11430, MPFR_RNDN);
        mpfr_div(r11432, r11411, r11425, MPFR_RNDN);
        mpfr_sin(r11433, r11432, MPFR_RNDN);
        mpfr_mul(r11434, r11431, r11433, MPFR_RNDN);
        mpfr_mul(r11435, r11425, r11434, MPFR_RNDN);
        mpfr_add(r11436, r11417, r11420, MPFR_RNDN);
        mpfr_sub(r11437, r11436, r11415, MPFR_RNDN);
        if (mpfr_get_si(r11424, MPFR_RNDN)) { mpfr_set(r11438, r11435, MPFR_RNDN); } else { mpfr_set(r11438, r11437, MPFR_RNDN); };
        if (mpfr_get_si(r11413, MPFR_RNDN)) { mpfr_set(r11439, r11422, MPFR_RNDN); } else { mpfr_set(r11439, r11438, MPFR_RNDN); };
        return mpfr_get_d(r11439, MPFR_RNDN);
}

