#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 r23187 = x;
        float r23188 = eps;
        float r23189 = r23187 + r23188;
        float r23190 = sin(r23189);
        float r23191 = sin(r23187);
        float r23192 = r23190 - r23191;
        return r23192;
}

double f_id(double x, double eps) {
        double r23193 = x;
        double r23194 = eps;
        double r23195 = r23193 + r23194;
        double r23196 = sin(r23195);
        double r23197 = sin(r23193);
        double r23198 = r23196 - r23197;
        return r23198;
}


double f_of(float x, float eps) {
        float r23199 = 2;
        float r23200 = eps;
        float r23201 = r23200 / r23199;
        float r23202 = sin(r23201);
        float r23203 = x;
        float r23204 = r23203 + r23203;
        float r23205 = r23200 + r23204;
        float r23206 = r23205 / r23199;
        float r23207 = cos(r23206);
        float r23208 = cbrt(r23207);
        float r23209 = r23208 * r23208;
        float r23210 = r23202 * r23209;
        float r23211 = r23210 * r23208;
        float r23212 = r23199 * r23211;
        float r23213 = -1.8956223695770888e-08;
        bool r23214 = r23212 <= r23213;
        float r23215 = sin(r23203);
        float r23216 = cos(r23200);
        float r23217 = r23215 * r23216;
        float r23218 = cos(r23203);
        float r23219 = sin(r23200);
        float r23220 = r23218 * r23219;
        float r23221 = r23220 - r23215;
        float r23222 = r23217 + r23221;
        float r23223 = 4.328522179700643e-16;
        bool r23224 = r23212 <= r23223;
        float r23225 = r23202 * r23207;
        float r23226 = r23199 * r23225;
        float r23227 = r23217 + r23220;
        float r23228 = r23227 - r23215;
        float r23229 = r23224 ? r23226 : r23228;
        float r23230 = r23214 ? r23222 : r23229;
        return r23230;
}

double f_od(double x, double eps) {
        double r23231 = 2;
        double r23232 = eps;
        double r23233 = r23232 / r23231;
        double r23234 = sin(r23233);
        double r23235 = x;
        double r23236 = r23235 + r23235;
        double r23237 = r23232 + r23236;
        double r23238 = r23237 / r23231;
        double r23239 = cos(r23238);
        double r23240 = cbrt(r23239);
        double r23241 = r23240 * r23240;
        double r23242 = r23234 * r23241;
        double r23243 = r23242 * r23240;
        double r23244 = r23231 * r23243;
        double r23245 = -1.8956223695770888e-08;
        bool r23246 = r23244 <= r23245;
        double r23247 = sin(r23235);
        double r23248 = cos(r23232);
        double r23249 = r23247 * r23248;
        double r23250 = cos(r23235);
        double r23251 = sin(r23232);
        double r23252 = r23250 * r23251;
        double r23253 = r23252 - r23247;
        double r23254 = r23249 + r23253;
        double r23255 = 4.328522179700643e-16;
        bool r23256 = r23244 <= r23255;
        double r23257 = r23234 * r23239;
        double r23258 = r23231 * r23257;
        double r23259 = r23249 + r23252;
        double r23260 = r23259 - r23247;
        double r23261 = r23256 ? r23258 : r23260;
        double r23262 = r23246 ? r23254 : r23261;
        return r23262;
}

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 r23263, r23264, r23265, r23266, r23267, r23268;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r23263);
        mpfr_init(r23264);
        mpfr_init(r23265);
        mpfr_init(r23266);
        mpfr_init(r23267);
        mpfr_init(r23268);
}

double f_im(double x, double eps) {
        mpfr_set_d(r23263, x, MPFR_RNDN);
        mpfr_set_d(r23264, eps, MPFR_RNDN);
        mpfr_add(r23265, r23263, r23264, MPFR_RNDN);
        mpfr_sin(r23266, r23265, MPFR_RNDN);
        mpfr_sin(r23267, r23263, MPFR_RNDN);
        mpfr_sub(r23268, r23266, r23267, MPFR_RNDN);
        return mpfr_get_d(r23268, MPFR_RNDN);
}

static mpfr_t r23269, r23270, r23271, r23272, r23273, r23274, r23275, r23276, r23277, r23278, r23279, r23280, r23281, r23282, r23283, r23284, r23285, r23286, r23287, r23288, r23289, r23290, r23291, r23292, r23293, r23294, r23295, r23296, r23297, r23298, r23299, r23300;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r23269, "2", 10, MPFR_RNDN);
        mpfr_init(r23270);
        mpfr_init(r23271);
        mpfr_init(r23272);
        mpfr_init(r23273);
        mpfr_init(r23274);
        mpfr_init(r23275);
        mpfr_init(r23276);
        mpfr_init(r23277);
        mpfr_init(r23278);
        mpfr_init(r23279);
        mpfr_init(r23280);
        mpfr_init(r23281);
        mpfr_init(r23282);
        mpfr_init_set_str(r23283, "-1.8956223695770888e-08", 10, MPFR_RNDN);
        mpfr_init(r23284);
        mpfr_init(r23285);
        mpfr_init(r23286);
        mpfr_init(r23287);
        mpfr_init(r23288);
        mpfr_init(r23289);
        mpfr_init(r23290);
        mpfr_init(r23291);
        mpfr_init(r23292);
        mpfr_init_set_str(r23293, "4.328522179700643e-16", 10, MPFR_RNDN);
        mpfr_init(r23294);
        mpfr_init(r23295);
        mpfr_init(r23296);
        mpfr_init(r23297);
        mpfr_init(r23298);
        mpfr_init(r23299);
        mpfr_init(r23300);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r23270, eps, MPFR_RNDN);
        mpfr_div(r23271, r23270, r23269, MPFR_RNDN);
        mpfr_sin(r23272, r23271, MPFR_RNDN);
        mpfr_set_d(r23273, x, MPFR_RNDN);
        mpfr_add(r23274, r23273, r23273, MPFR_RNDN);
        mpfr_add(r23275, r23270, r23274, MPFR_RNDN);
        mpfr_div(r23276, r23275, r23269, MPFR_RNDN);
        mpfr_cos(r23277, r23276, MPFR_RNDN);
        mpfr_cbrt(r23278, r23277, MPFR_RNDN);
        mpfr_mul(r23279, r23278, r23278, MPFR_RNDN);
        mpfr_mul(r23280, r23272, r23279, MPFR_RNDN);
        mpfr_mul(r23281, r23280, r23278, MPFR_RNDN);
        mpfr_mul(r23282, r23269, r23281, MPFR_RNDN);
        ;
        mpfr_set_si(r23284, mpfr_cmp(r23282, r23283) <= 0, MPFR_RNDN);
        mpfr_sin(r23285, r23273, MPFR_RNDN);
        mpfr_cos(r23286, r23270, MPFR_RNDN);
        mpfr_mul(r23287, r23285, r23286, MPFR_RNDN);
        mpfr_cos(r23288, r23273, MPFR_RNDN);
        mpfr_sin(r23289, r23270, MPFR_RNDN);
        mpfr_mul(r23290, r23288, r23289, MPFR_RNDN);
        mpfr_sub(r23291, r23290, r23285, MPFR_RNDN);
        mpfr_add(r23292, r23287, r23291, MPFR_RNDN);
        ;
        mpfr_set_si(r23294, mpfr_cmp(r23282, r23293) <= 0, MPFR_RNDN);
        mpfr_mul(r23295, r23272, r23277, MPFR_RNDN);
        mpfr_mul(r23296, r23269, r23295, MPFR_RNDN);
        mpfr_add(r23297, r23287, r23290, MPFR_RNDN);
        mpfr_sub(r23298, r23297, r23285, MPFR_RNDN);
        if (mpfr_get_si(r23294, MPFR_RNDN)) { mpfr_set(r23299, r23296, MPFR_RNDN); } else { mpfr_set(r23299, r23298, MPFR_RNDN); };
        if (mpfr_get_si(r23284, MPFR_RNDN)) { mpfr_set(r23300, r23292, MPFR_RNDN); } else { mpfr_set(r23300, r23299, MPFR_RNDN); };
        return mpfr_get_d(r23300, MPFR_RNDN);
}

static mpfr_t r23301, r23302, r23303, r23304, r23305, r23306, r23307, r23308, r23309, r23310, r23311, r23312, r23313, r23314, r23315, r23316, r23317, r23318, r23319, r23320, r23321, r23322, r23323, r23324, r23325, r23326, r23327, r23328, r23329, r23330, r23331, r23332;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r23301, "2", 10, MPFR_RNDN);
        mpfr_init(r23302);
        mpfr_init(r23303);
        mpfr_init(r23304);
        mpfr_init(r23305);
        mpfr_init(r23306);
        mpfr_init(r23307);
        mpfr_init(r23308);
        mpfr_init(r23309);
        mpfr_init(r23310);
        mpfr_init(r23311);
        mpfr_init(r23312);
        mpfr_init(r23313);
        mpfr_init(r23314);
        mpfr_init_set_str(r23315, "-1.8956223695770888e-08", 10, MPFR_RNDN);
        mpfr_init(r23316);
        mpfr_init(r23317);
        mpfr_init(r23318);
        mpfr_init(r23319);
        mpfr_init(r23320);
        mpfr_init(r23321);
        mpfr_init(r23322);
        mpfr_init(r23323);
        mpfr_init(r23324);
        mpfr_init_set_str(r23325, "4.328522179700643e-16", 10, MPFR_RNDN);
        mpfr_init(r23326);
        mpfr_init(r23327);
        mpfr_init(r23328);
        mpfr_init(r23329);
        mpfr_init(r23330);
        mpfr_init(r23331);
        mpfr_init(r23332);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r23302, eps, MPFR_RNDN);
        mpfr_div(r23303, r23302, r23301, MPFR_RNDN);
        mpfr_sin(r23304, r23303, MPFR_RNDN);
        mpfr_set_d(r23305, x, MPFR_RNDN);
        mpfr_add(r23306, r23305, r23305, MPFR_RNDN);
        mpfr_add(r23307, r23302, r23306, MPFR_RNDN);
        mpfr_div(r23308, r23307, r23301, MPFR_RNDN);
        mpfr_cos(r23309, r23308, MPFR_RNDN);
        mpfr_cbrt(r23310, r23309, MPFR_RNDN);
        mpfr_mul(r23311, r23310, r23310, MPFR_RNDN);
        mpfr_mul(r23312, r23304, r23311, MPFR_RNDN);
        mpfr_mul(r23313, r23312, r23310, MPFR_RNDN);
        mpfr_mul(r23314, r23301, r23313, MPFR_RNDN);
        ;
        mpfr_set_si(r23316, mpfr_cmp(r23314, r23315) <= 0, MPFR_RNDN);
        mpfr_sin(r23317, r23305, MPFR_RNDN);
        mpfr_cos(r23318, r23302, MPFR_RNDN);
        mpfr_mul(r23319, r23317, r23318, MPFR_RNDN);
        mpfr_cos(r23320, r23305, MPFR_RNDN);
        mpfr_sin(r23321, r23302, MPFR_RNDN);
        mpfr_mul(r23322, r23320, r23321, MPFR_RNDN);
        mpfr_sub(r23323, r23322, r23317, MPFR_RNDN);
        mpfr_add(r23324, r23319, r23323, MPFR_RNDN);
        ;
        mpfr_set_si(r23326, mpfr_cmp(r23314, r23325) <= 0, MPFR_RNDN);
        mpfr_mul(r23327, r23304, r23309, MPFR_RNDN);
        mpfr_mul(r23328, r23301, r23327, MPFR_RNDN);
        mpfr_add(r23329, r23319, r23322, MPFR_RNDN);
        mpfr_sub(r23330, r23329, r23317, MPFR_RNDN);
        if (mpfr_get_si(r23326, MPFR_RNDN)) { mpfr_set(r23331, r23328, MPFR_RNDN); } else { mpfr_set(r23331, r23330, MPFR_RNDN); };
        if (mpfr_get_si(r23316, MPFR_RNDN)) { mpfr_set(r23332, r23324, MPFR_RNDN); } else { mpfr_set(r23332, r23331, MPFR_RNDN); };
        return mpfr_get_d(r23332, MPFR_RNDN);
}

