#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 r11313 = x;
        float r11314 = eps;
        float r11315 = r11313 + r11314;
        float r11316 = sin(r11315);
        float r11317 = sin(r11313);
        float r11318 = r11316 - r11317;
        return r11318;
}

double f_id(double x, double eps) {
        double r11319 = x;
        double r11320 = eps;
        double r11321 = r11319 + r11320;
        double r11322 = sin(r11321);
        double r11323 = sin(r11319);
        double r11324 = r11322 - r11323;
        return r11324;
}


double f_of(float x, float eps) {
        float r11325 = eps;
        float r11326 = -4.702463674507346e-06;
        bool r11327 = r11325 <= r11326;
        float r11328 = x;
        float r11329 = sin(r11328);
        float r11330 = cos(r11325);
        float r11331 = r11329 * r11330;
        float r11332 = cos(r11328);
        float r11333 = sin(r11325);
        float r11334 = r11332 * r11333;
        float r11335 = r11334 - r11329;
        float r11336 = r11331 + r11335;
        float r11337 = 6.677242975028955e-09;
        bool r11338 = r11325 <= r11337;
        float r11339 = 2;
        float r11340 = r11328 + r11328;
        float r11341 = r11325 + r11340;
        float r11342 = r11341 / r11339;
        float r11343 = cos(r11342);
        float r11344 = log1p(r11343);
        float r11345 = expm1(r11344);
        float r11346 = r11325 / r11339;
        float r11347 = sin(r11346);
        float r11348 = r11345 * r11347;
        float r11349 = r11339 * r11348;
        float r11350 = r11331 + r11334;
        float r11351 = r11350 - r11329;
        float r11352 = r11338 ? r11349 : r11351;
        float r11353 = r11327 ? r11336 : r11352;
        return r11353;
}

double f_od(double x, double eps) {
        double r11354 = eps;
        double r11355 = -4.702463674507346e-06;
        bool r11356 = r11354 <= r11355;
        double r11357 = x;
        double r11358 = sin(r11357);
        double r11359 = cos(r11354);
        double r11360 = r11358 * r11359;
        double r11361 = cos(r11357);
        double r11362 = sin(r11354);
        double r11363 = r11361 * r11362;
        double r11364 = r11363 - r11358;
        double r11365 = r11360 + r11364;
        double r11366 = 6.677242975028955e-09;
        bool r11367 = r11354 <= r11366;
        double r11368 = 2;
        double r11369 = r11357 + r11357;
        double r11370 = r11354 + r11369;
        double r11371 = r11370 / r11368;
        double r11372 = cos(r11371);
        double r11373 = log1p(r11372);
        double r11374 = expm1(r11373);
        double r11375 = r11354 / r11368;
        double r11376 = sin(r11375);
        double r11377 = r11374 * r11376;
        double r11378 = r11368 * r11377;
        double r11379 = r11360 + r11363;
        double r11380 = r11379 - r11358;
        double r11381 = r11367 ? r11378 : r11380;
        double r11382 = r11356 ? r11365 : r11381;
        return r11382;
}

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 r11383, r11384, r11385, r11386, r11387, r11388;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11383);
        mpfr_init(r11384);
        mpfr_init(r11385);
        mpfr_init(r11386);
        mpfr_init(r11387);
        mpfr_init(r11388);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11383, x, MPFR_RNDN);
        mpfr_set_d(r11384, eps, MPFR_RNDN);
        mpfr_add(r11385, r11383, r11384, MPFR_RNDN);
        mpfr_sin(r11386, r11385, MPFR_RNDN);
        mpfr_sin(r11387, r11383, MPFR_RNDN);
        mpfr_sub(r11388, r11386, r11387, MPFR_RNDN);
        return mpfr_get_d(r11388, MPFR_RNDN);
}

static mpfr_t r11389, r11390, r11391, r11392, r11393, r11394, r11395, r11396, r11397, r11398, r11399, r11400, r11401, r11402, r11403, r11404, r11405, r11406, r11407, r11408, r11409, r11410, r11411, r11412, r11413, r11414, r11415, r11416, r11417;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11389);
        mpfr_init_set_str(r11390, "-4.702463674507346e-06", 10, MPFR_RNDN);
        mpfr_init(r11391);
        mpfr_init(r11392);
        mpfr_init(r11393);
        mpfr_init(r11394);
        mpfr_init(r11395);
        mpfr_init(r11396);
        mpfr_init(r11397);
        mpfr_init(r11398);
        mpfr_init(r11399);
        mpfr_init(r11400);
        mpfr_init_set_str(r11401, "6.677242975028955e-09", 10, MPFR_RNDN);
        mpfr_init(r11402);
        mpfr_init_set_str(r11403, "2", 10, MPFR_RNDN);
        mpfr_init(r11404);
        mpfr_init(r11405);
        mpfr_init(r11406);
        mpfr_init(r11407);
        mpfr_init(r11408);
        mpfr_init(r11409);
        mpfr_init(r11410);
        mpfr_init(r11411);
        mpfr_init(r11412);
        mpfr_init(r11413);
        mpfr_init(r11414);
        mpfr_init(r11415);
        mpfr_init(r11416);
        mpfr_init(r11417);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11389, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r11391, mpfr_cmp(r11389, r11390) <= 0, MPFR_RNDN);
        mpfr_set_d(r11392, x, MPFR_RNDN);
        mpfr_sin(r11393, r11392, MPFR_RNDN);
        mpfr_cos(r11394, r11389, MPFR_RNDN);
        mpfr_mul(r11395, r11393, r11394, MPFR_RNDN);
        mpfr_cos(r11396, r11392, MPFR_RNDN);
        mpfr_sin(r11397, r11389, MPFR_RNDN);
        mpfr_mul(r11398, r11396, r11397, MPFR_RNDN);
        mpfr_sub(r11399, r11398, r11393, MPFR_RNDN);
        mpfr_add(r11400, r11395, r11399, MPFR_RNDN);
        ;
        mpfr_set_si(r11402, mpfr_cmp(r11389, r11401) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r11404, r11392, r11392, MPFR_RNDN);
        mpfr_add(r11405, r11389, r11404, MPFR_RNDN);
        mpfr_div(r11406, r11405, r11403, MPFR_RNDN);
        mpfr_cos(r11407, r11406, MPFR_RNDN);
        mpfr_log1p(r11408, r11407, MPFR_RNDN);
        mpfr_expm1(r11409, r11408, MPFR_RNDN);
        mpfr_div(r11410, r11389, r11403, MPFR_RNDN);
        mpfr_sin(r11411, r11410, MPFR_RNDN);
        mpfr_mul(r11412, r11409, r11411, MPFR_RNDN);
        mpfr_mul(r11413, r11403, r11412, MPFR_RNDN);
        mpfr_add(r11414, r11395, r11398, MPFR_RNDN);
        mpfr_sub(r11415, r11414, r11393, MPFR_RNDN);
        if (mpfr_get_si(r11402, MPFR_RNDN)) { mpfr_set(r11416, r11413, MPFR_RNDN); } else { mpfr_set(r11416, r11415, MPFR_RNDN); };
        if (mpfr_get_si(r11391, MPFR_RNDN)) { mpfr_set(r11417, r11400, MPFR_RNDN); } else { mpfr_set(r11417, r11416, MPFR_RNDN); };
        return mpfr_get_d(r11417, MPFR_RNDN);
}

static mpfr_t r11418, r11419, r11420, r11421, r11422, r11423, r11424, r11425, r11426, r11427, r11428, r11429, r11430, r11431, r11432, r11433, r11434, r11435, r11436, r11437, r11438, r11439, r11440, r11441, r11442, r11443, r11444, r11445, r11446;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11418);
        mpfr_init_set_str(r11419, "-4.702463674507346e-06", 10, MPFR_RNDN);
        mpfr_init(r11420);
        mpfr_init(r11421);
        mpfr_init(r11422);
        mpfr_init(r11423);
        mpfr_init(r11424);
        mpfr_init(r11425);
        mpfr_init(r11426);
        mpfr_init(r11427);
        mpfr_init(r11428);
        mpfr_init(r11429);
        mpfr_init_set_str(r11430, "6.677242975028955e-09", 10, MPFR_RNDN);
        mpfr_init(r11431);
        mpfr_init_set_str(r11432, "2", 10, MPFR_RNDN);
        mpfr_init(r11433);
        mpfr_init(r11434);
        mpfr_init(r11435);
        mpfr_init(r11436);
        mpfr_init(r11437);
        mpfr_init(r11438);
        mpfr_init(r11439);
        mpfr_init(r11440);
        mpfr_init(r11441);
        mpfr_init(r11442);
        mpfr_init(r11443);
        mpfr_init(r11444);
        mpfr_init(r11445);
        mpfr_init(r11446);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11418, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r11420, mpfr_cmp(r11418, r11419) <= 0, MPFR_RNDN);
        mpfr_set_d(r11421, x, MPFR_RNDN);
        mpfr_sin(r11422, r11421, MPFR_RNDN);
        mpfr_cos(r11423, r11418, MPFR_RNDN);
        mpfr_mul(r11424, r11422, r11423, MPFR_RNDN);
        mpfr_cos(r11425, r11421, MPFR_RNDN);
        mpfr_sin(r11426, r11418, MPFR_RNDN);
        mpfr_mul(r11427, r11425, r11426, MPFR_RNDN);
        mpfr_sub(r11428, r11427, r11422, MPFR_RNDN);
        mpfr_add(r11429, r11424, r11428, MPFR_RNDN);
        ;
        mpfr_set_si(r11431, mpfr_cmp(r11418, r11430) <= 0, MPFR_RNDN);
        ;
        mpfr_add(r11433, r11421, r11421, MPFR_RNDN);
        mpfr_add(r11434, r11418, r11433, MPFR_RNDN);
        mpfr_div(r11435, r11434, r11432, MPFR_RNDN);
        mpfr_cos(r11436, r11435, MPFR_RNDN);
        mpfr_log1p(r11437, r11436, MPFR_RNDN);
        mpfr_expm1(r11438, r11437, MPFR_RNDN);
        mpfr_div(r11439, r11418, r11432, MPFR_RNDN);
        mpfr_sin(r11440, r11439, MPFR_RNDN);
        mpfr_mul(r11441, r11438, r11440, MPFR_RNDN);
        mpfr_mul(r11442, r11432, r11441, MPFR_RNDN);
        mpfr_add(r11443, r11424, r11427, MPFR_RNDN);
        mpfr_sub(r11444, r11443, r11422, MPFR_RNDN);
        if (mpfr_get_si(r11431, MPFR_RNDN)) { mpfr_set(r11445, r11442, MPFR_RNDN); } else { mpfr_set(r11445, r11444, MPFR_RNDN); };
        if (mpfr_get_si(r11420, MPFR_RNDN)) { mpfr_set(r11446, r11429, MPFR_RNDN); } else { mpfr_set(r11446, r11445, MPFR_RNDN); };
        return mpfr_get_d(r11446, MPFR_RNDN);
}

