#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 r25083 = x;
        float r25084 = eps;
        float r25085 = r25083 + r25084;
        float r25086 = sin(r25085);
        float r25087 = sin(r25083);
        float r25088 = r25086 - r25087;
        return r25088;
}

double f_id(double x, double eps) {
        double r25089 = x;
        double r25090 = eps;
        double r25091 = r25089 + r25090;
        double r25092 = sin(r25091);
        double r25093 = sin(r25089);
        double r25094 = r25092 - r25093;
        return r25094;
}


double f_of(float x, float eps) {
        float r25095 = 2;
        float r25096 = eps;
        float r25097 = r25096 / r25095;
        float r25098 = sin(r25097);
        float r25099 = x;
        float r25100 = r25096 + r25099;
        float r25101 = r25099 + r25100;
        float r25102 = r25101 / r25095;
        float r25103 = cos(r25102);
        float r25104 = cbrt(r25103);
        float r25105 = r25104 * r25104;
        float r25106 = r25105 * r25104;
        float r25107 = r25098 * r25106;
        float r25108 = r25095 * r25107;
        float r25109 = -0.00017854767991306873;
        bool r25110 = r25108 <= r25109;
        float r25111 = sin(r25099);
        float r25112 = cos(r25096);
        float r25113 = r25111 * r25112;
        float r25114 = cos(r25099);
        float r25115 = sin(r25096);
        float r25116 = r25114 * r25115;
        float r25117 = r25116 - r25111;
        float r25118 = r25113 + r25117;
        float r25119 = 3.237503141141047e-07;
        bool r25120 = r25108 <= r25119;
        float r25121 = r25098 * r25103;
        float r25122 = r25095 * r25121;
        float r25123 = r25113 + r25116;
        float r25124 = r25123 - r25111;
        float r25125 = r25120 ? r25122 : r25124;
        float r25126 = r25110 ? r25118 : r25125;
        return r25126;
}

double f_od(double x, double eps) {
        double r25127 = 2;
        double r25128 = eps;
        double r25129 = r25128 / r25127;
        double r25130 = sin(r25129);
        double r25131 = x;
        double r25132 = r25128 + r25131;
        double r25133 = r25131 + r25132;
        double r25134 = r25133 / r25127;
        double r25135 = cos(r25134);
        double r25136 = cbrt(r25135);
        double r25137 = r25136 * r25136;
        double r25138 = r25137 * r25136;
        double r25139 = r25130 * r25138;
        double r25140 = r25127 * r25139;
        double r25141 = -0.00017854767991306873;
        bool r25142 = r25140 <= r25141;
        double r25143 = sin(r25131);
        double r25144 = cos(r25128);
        double r25145 = r25143 * r25144;
        double r25146 = cos(r25131);
        double r25147 = sin(r25128);
        double r25148 = r25146 * r25147;
        double r25149 = r25148 - r25143;
        double r25150 = r25145 + r25149;
        double r25151 = 3.237503141141047e-07;
        bool r25152 = r25140 <= r25151;
        double r25153 = r25130 * r25135;
        double r25154 = r25127 * r25153;
        double r25155 = r25145 + r25148;
        double r25156 = r25155 - r25143;
        double r25157 = r25152 ? r25154 : r25156;
        double r25158 = r25142 ? r25150 : r25157;
        return r25158;
}

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 r25159, r25160, r25161, r25162, r25163, r25164;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r25159);
        mpfr_init(r25160);
        mpfr_init(r25161);
        mpfr_init(r25162);
        mpfr_init(r25163);
        mpfr_init(r25164);
}

double f_im(double x, double eps) {
        mpfr_set_d(r25159, x, MPFR_RNDN);
        mpfr_set_d(r25160, eps, MPFR_RNDN);
        mpfr_add(r25161, r25159, r25160, MPFR_RNDN);
        mpfr_sin(r25162, r25161, MPFR_RNDN);
        mpfr_sin(r25163, r25159, MPFR_RNDN);
        mpfr_sub(r25164, r25162, r25163, MPFR_RNDN);
        return mpfr_get_d(r25164, MPFR_RNDN);
}

static mpfr_t r25165, r25166, r25167, r25168, r25169, r25170, r25171, r25172, r25173, r25174, r25175, r25176, r25177, r25178, r25179, r25180, r25181, r25182, r25183, r25184, r25185, r25186, r25187, r25188, r25189, r25190, r25191, r25192, r25193, r25194, r25195, r25196;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r25165, "2", 10, MPFR_RNDN);
        mpfr_init(r25166);
        mpfr_init(r25167);
        mpfr_init(r25168);
        mpfr_init(r25169);
        mpfr_init(r25170);
        mpfr_init(r25171);
        mpfr_init(r25172);
        mpfr_init(r25173);
        mpfr_init(r25174);
        mpfr_init(r25175);
        mpfr_init(r25176);
        mpfr_init(r25177);
        mpfr_init(r25178);
        mpfr_init_set_str(r25179, "-0.00017854767991306873", 10, MPFR_RNDN);
        mpfr_init(r25180);
        mpfr_init(r25181);
        mpfr_init(r25182);
        mpfr_init(r25183);
        mpfr_init(r25184);
        mpfr_init(r25185);
        mpfr_init(r25186);
        mpfr_init(r25187);
        mpfr_init(r25188);
        mpfr_init_set_str(r25189, "3.237503141141047e-07", 10, MPFR_RNDN);
        mpfr_init(r25190);
        mpfr_init(r25191);
        mpfr_init(r25192);
        mpfr_init(r25193);
        mpfr_init(r25194);
        mpfr_init(r25195);
        mpfr_init(r25196);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r25166, eps, MPFR_RNDN);
        mpfr_div(r25167, r25166, r25165, MPFR_RNDN);
        mpfr_sin(r25168, r25167, MPFR_RNDN);
        mpfr_set_d(r25169, x, MPFR_RNDN);
        mpfr_add(r25170, r25166, r25169, MPFR_RNDN);
        mpfr_add(r25171, r25169, r25170, MPFR_RNDN);
        mpfr_div(r25172, r25171, r25165, MPFR_RNDN);
        mpfr_cos(r25173, r25172, MPFR_RNDN);
        mpfr_cbrt(r25174, r25173, MPFR_RNDN);
        mpfr_mul(r25175, r25174, r25174, MPFR_RNDN);
        mpfr_mul(r25176, r25175, r25174, MPFR_RNDN);
        mpfr_mul(r25177, r25168, r25176, MPFR_RNDN);
        mpfr_mul(r25178, r25165, r25177, MPFR_RNDN);
        ;
        mpfr_set_si(r25180, mpfr_cmp(r25178, r25179) <= 0, MPFR_RNDN);
        mpfr_sin(r25181, r25169, MPFR_RNDN);
        mpfr_cos(r25182, r25166, MPFR_RNDN);
        mpfr_mul(r25183, r25181, r25182, MPFR_RNDN);
        mpfr_cos(r25184, r25169, MPFR_RNDN);
        mpfr_sin(r25185, r25166, MPFR_RNDN);
        mpfr_mul(r25186, r25184, r25185, MPFR_RNDN);
        mpfr_sub(r25187, r25186, r25181, MPFR_RNDN);
        mpfr_add(r25188, r25183, r25187, MPFR_RNDN);
        ;
        mpfr_set_si(r25190, mpfr_cmp(r25178, r25189) <= 0, MPFR_RNDN);
        mpfr_mul(r25191, r25168, r25173, MPFR_RNDN);
        mpfr_mul(r25192, r25165, r25191, MPFR_RNDN);
        mpfr_add(r25193, r25183, r25186, MPFR_RNDN);
        mpfr_sub(r25194, r25193, r25181, MPFR_RNDN);
        if (mpfr_get_si(r25190, MPFR_RNDN)) { mpfr_set(r25195, r25192, MPFR_RNDN); } else { mpfr_set(r25195, r25194, MPFR_RNDN); };
        if (mpfr_get_si(r25180, MPFR_RNDN)) { mpfr_set(r25196, r25188, MPFR_RNDN); } else { mpfr_set(r25196, r25195, MPFR_RNDN); };
        return mpfr_get_d(r25196, MPFR_RNDN);
}

static mpfr_t r25197, r25198, r25199, r25200, r25201, r25202, r25203, r25204, r25205, r25206, r25207, r25208, r25209, r25210, r25211, r25212, r25213, r25214, r25215, r25216, r25217, r25218, r25219, r25220, r25221, r25222, r25223, r25224, r25225, r25226, r25227, r25228;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r25197, "2", 10, MPFR_RNDN);
        mpfr_init(r25198);
        mpfr_init(r25199);
        mpfr_init(r25200);
        mpfr_init(r25201);
        mpfr_init(r25202);
        mpfr_init(r25203);
        mpfr_init(r25204);
        mpfr_init(r25205);
        mpfr_init(r25206);
        mpfr_init(r25207);
        mpfr_init(r25208);
        mpfr_init(r25209);
        mpfr_init(r25210);
        mpfr_init_set_str(r25211, "-0.00017854767991306873", 10, MPFR_RNDN);
        mpfr_init(r25212);
        mpfr_init(r25213);
        mpfr_init(r25214);
        mpfr_init(r25215);
        mpfr_init(r25216);
        mpfr_init(r25217);
        mpfr_init(r25218);
        mpfr_init(r25219);
        mpfr_init(r25220);
        mpfr_init_set_str(r25221, "3.237503141141047e-07", 10, MPFR_RNDN);
        mpfr_init(r25222);
        mpfr_init(r25223);
        mpfr_init(r25224);
        mpfr_init(r25225);
        mpfr_init(r25226);
        mpfr_init(r25227);
        mpfr_init(r25228);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r25198, eps, MPFR_RNDN);
        mpfr_div(r25199, r25198, r25197, MPFR_RNDN);
        mpfr_sin(r25200, r25199, MPFR_RNDN);
        mpfr_set_d(r25201, x, MPFR_RNDN);
        mpfr_add(r25202, r25198, r25201, MPFR_RNDN);
        mpfr_add(r25203, r25201, r25202, MPFR_RNDN);
        mpfr_div(r25204, r25203, r25197, MPFR_RNDN);
        mpfr_cos(r25205, r25204, MPFR_RNDN);
        mpfr_cbrt(r25206, r25205, MPFR_RNDN);
        mpfr_mul(r25207, r25206, r25206, MPFR_RNDN);
        mpfr_mul(r25208, r25207, r25206, MPFR_RNDN);
        mpfr_mul(r25209, r25200, r25208, MPFR_RNDN);
        mpfr_mul(r25210, r25197, r25209, MPFR_RNDN);
        ;
        mpfr_set_si(r25212, mpfr_cmp(r25210, r25211) <= 0, MPFR_RNDN);
        mpfr_sin(r25213, r25201, MPFR_RNDN);
        mpfr_cos(r25214, r25198, MPFR_RNDN);
        mpfr_mul(r25215, r25213, r25214, MPFR_RNDN);
        mpfr_cos(r25216, r25201, MPFR_RNDN);
        mpfr_sin(r25217, r25198, MPFR_RNDN);
        mpfr_mul(r25218, r25216, r25217, MPFR_RNDN);
        mpfr_sub(r25219, r25218, r25213, MPFR_RNDN);
        mpfr_add(r25220, r25215, r25219, MPFR_RNDN);
        ;
        mpfr_set_si(r25222, mpfr_cmp(r25210, r25221) <= 0, MPFR_RNDN);
        mpfr_mul(r25223, r25200, r25205, MPFR_RNDN);
        mpfr_mul(r25224, r25197, r25223, MPFR_RNDN);
        mpfr_add(r25225, r25215, r25218, MPFR_RNDN);
        mpfr_sub(r25226, r25225, r25213, MPFR_RNDN);
        if (mpfr_get_si(r25222, MPFR_RNDN)) { mpfr_set(r25227, r25224, MPFR_RNDN); } else { mpfr_set(r25227, r25226, MPFR_RNDN); };
        if (mpfr_get_si(r25212, MPFR_RNDN)) { mpfr_set(r25228, r25220, MPFR_RNDN); } else { mpfr_set(r25228, r25227, MPFR_RNDN); };
        return mpfr_get_d(r25228, MPFR_RNDN);
}

