#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2tan (problem 3.3.2)";

double f_if(float x, float eps) {
        float r11122 = x;
        float r11123 = eps;
        float r11124 = r11122 + r11123;
        float r11125 = tan(r11124);
        float r11126 = tan(r11122);
        float r11127 = r11125 - r11126;
        return r11127;
}

double f_id(double x, double eps) {
        double r11128 = x;
        double r11129 = eps;
        double r11130 = r11128 + r11129;
        double r11131 = tan(r11130);
        double r11132 = tan(r11128);
        double r11133 = r11131 - r11132;
        return r11133;
}


double f_of(float x, float eps) {
        float r11134 = x;
        float r11135 = tan(r11134);
        float r11136 = eps;
        float r11137 = tan(r11136);
        float r11138 = r11135 + r11137;
        float r11139 = 1;
        float r11140 = r11135 * r11137;
        float r11141 = log1p(r11140);
        float r11142 = expm1(r11141);
        float r11143 = r11139 - r11142;
        float r11144 = r11138 / r11143;
        float r11145 = r11144 - r11135;
        float r11146 = -3.295028045312774e-13;
        bool r11147 = r11145 <= r11146;
        float r11148 = 3.9954989461759e-310;
        bool r11149 = r11145 <= r11148;
        float r11150 = r11136 * r11134;
        float r11151 = fma(r11150, r11150, r11150);
        float r11152 = fma(r11136, r11151, r11136);
        float r11153 = r11137 * r11135;
        float r11154 = 3;
        float r11155 = pow(r11153, r11154);
        float r11156 = cbrt(r11155);
        float r11157 = r11139 - r11156;
        float r11158 = r11138 / r11157;
        float r11159 = r11158 - r11135;
        float r11160 = r11149 ? r11152 : r11159;
        float r11161 = r11147 ? r11145 : r11160;
        return r11161;
}

double f_od(double x, double eps) {
        double r11162 = x;
        double r11163 = tan(r11162);
        double r11164 = eps;
        double r11165 = tan(r11164);
        double r11166 = r11163 + r11165;
        double r11167 = 1;
        double r11168 = r11163 * r11165;
        double r11169 = log1p(r11168);
        double r11170 = expm1(r11169);
        double r11171 = r11167 - r11170;
        double r11172 = r11166 / r11171;
        double r11173 = r11172 - r11163;
        double r11174 = -3.295028045312774e-13;
        bool r11175 = r11173 <= r11174;
        double r11176 = 3.9954989461759e-310;
        bool r11177 = r11173 <= r11176;
        double r11178 = r11164 * r11162;
        double r11179 = fma(r11178, r11178, r11178);
        double r11180 = fma(r11164, r11179, r11164);
        double r11181 = r11165 * r11163;
        double r11182 = 3;
        double r11183 = pow(r11181, r11182);
        double r11184 = cbrt(r11183);
        double r11185 = r11167 - r11184;
        double r11186 = r11166 / r11185;
        double r11187 = r11186 - r11163;
        double r11188 = r11177 ? r11180 : r11187;
        double r11189 = r11175 ? r11173 : r11188;
        return r11189;
}

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 r11190, r11191, r11192, r11193, r11194, r11195;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11190);
        mpfr_init(r11191);
        mpfr_init(r11192);
        mpfr_init(r11193);
        mpfr_init(r11194);
        mpfr_init(r11195);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11190, x, MPFR_RNDN);
        mpfr_set_d(r11191, eps, MPFR_RNDN);
        mpfr_add(r11192, r11190, r11191, MPFR_RNDN);
        mpfr_tan(r11193, r11192, MPFR_RNDN);
        mpfr_tan(r11194, r11190, MPFR_RNDN);
        mpfr_sub(r11195, r11193, r11194, MPFR_RNDN);
        return mpfr_get_d(r11195, MPFR_RNDN);
}

static mpfr_t r11196, r11197, r11198, r11199, r11200, r11201, r11202, r11203, r11204, r11205, r11206, r11207, r11208, r11209, r11210, r11211, r11212, r11213, r11214, r11215, r11216, r11217, r11218, r11219, r11220, r11221, r11222, r11223;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11196);
        mpfr_init(r11197);
        mpfr_init(r11198);
        mpfr_init(r11199);
        mpfr_init(r11200);
        mpfr_init_set_str(r11201, "1", 10, MPFR_RNDN);
        mpfr_init(r11202);
        mpfr_init(r11203);
        mpfr_init(r11204);
        mpfr_init(r11205);
        mpfr_init(r11206);
        mpfr_init(r11207);
        mpfr_init_set_str(r11208, "-3.295028045312774e-13", 10, MPFR_RNDN);
        mpfr_init(r11209);
        mpfr_init_set_str(r11210, "3.9954989461759e-310", 10, MPFR_RNDN);
        mpfr_init(r11211);
        mpfr_init(r11212);
        mpfr_init(r11213);
        mpfr_init(r11214);
        mpfr_init(r11215);
        mpfr_init_set_str(r11216, "3", 10, MPFR_RNDN);
        mpfr_init(r11217);
        mpfr_init(r11218);
        mpfr_init(r11219);
        mpfr_init(r11220);
        mpfr_init(r11221);
        mpfr_init(r11222);
        mpfr_init(r11223);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11196, x, MPFR_RNDN);
        mpfr_tan(r11197, r11196, MPFR_RNDN);
        mpfr_set_d(r11198, eps, MPFR_RNDN);
        mpfr_tan(r11199, r11198, MPFR_RNDN);
        mpfr_add(r11200, r11197, r11199, MPFR_RNDN);
        ;
        mpfr_mul(r11202, r11197, r11199, MPFR_RNDN);
        mpfr_log1p(r11203, r11202, MPFR_RNDN);
        mpfr_expm1(r11204, r11203, MPFR_RNDN);
        mpfr_sub(r11205, r11201, r11204, MPFR_RNDN);
        mpfr_div(r11206, r11200, r11205, MPFR_RNDN);
        mpfr_sub(r11207, r11206, r11197, MPFR_RNDN);
        ;
        mpfr_set_si(r11209, mpfr_cmp(r11207, r11208) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r11211, mpfr_cmp(r11207, r11210) <= 0, MPFR_RNDN);
        mpfr_mul(r11212, r11198, r11196, MPFR_RNDN);
        mpfr_fma(r11213, r11212, r11212, r11212, MPFR_RNDN);
        mpfr_fma(r11214, r11198, r11213, r11198, MPFR_RNDN);
        mpfr_mul(r11215, r11199, r11197, MPFR_RNDN);
        ;
        mpfr_pow(r11217, r11215, r11216, MPFR_RNDN);
        mpfr_cbrt(r11218, r11217, MPFR_RNDN);
        mpfr_sub(r11219, r11201, r11218, MPFR_RNDN);
        mpfr_div(r11220, r11200, r11219, MPFR_RNDN);
        mpfr_sub(r11221, r11220, r11197, MPFR_RNDN);
        if (mpfr_get_si(r11211, MPFR_RNDN)) { mpfr_set(r11222, r11214, MPFR_RNDN); } else { mpfr_set(r11222, r11221, MPFR_RNDN); };
        if (mpfr_get_si(r11209, MPFR_RNDN)) { mpfr_set(r11223, r11207, MPFR_RNDN); } else { mpfr_set(r11223, r11222, MPFR_RNDN); };
        return mpfr_get_d(r11223, MPFR_RNDN);
}

static mpfr_t r11224, r11225, r11226, r11227, r11228, r11229, r11230, r11231, r11232, r11233, r11234, r11235, r11236, r11237, r11238, r11239, r11240, r11241, r11242, r11243, r11244, r11245, r11246, r11247, r11248, r11249, r11250, r11251;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11224);
        mpfr_init(r11225);
        mpfr_init(r11226);
        mpfr_init(r11227);
        mpfr_init(r11228);
        mpfr_init_set_str(r11229, "1", 10, MPFR_RNDN);
        mpfr_init(r11230);
        mpfr_init(r11231);
        mpfr_init(r11232);
        mpfr_init(r11233);
        mpfr_init(r11234);
        mpfr_init(r11235);
        mpfr_init_set_str(r11236, "-3.295028045312774e-13", 10, MPFR_RNDN);
        mpfr_init(r11237);
        mpfr_init_set_str(r11238, "3.9954989461759e-310", 10, MPFR_RNDN);
        mpfr_init(r11239);
        mpfr_init(r11240);
        mpfr_init(r11241);
        mpfr_init(r11242);
        mpfr_init(r11243);
        mpfr_init_set_str(r11244, "3", 10, MPFR_RNDN);
        mpfr_init(r11245);
        mpfr_init(r11246);
        mpfr_init(r11247);
        mpfr_init(r11248);
        mpfr_init(r11249);
        mpfr_init(r11250);
        mpfr_init(r11251);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11224, x, MPFR_RNDN);
        mpfr_tan(r11225, r11224, MPFR_RNDN);
        mpfr_set_d(r11226, eps, MPFR_RNDN);
        mpfr_tan(r11227, r11226, MPFR_RNDN);
        mpfr_add(r11228, r11225, r11227, MPFR_RNDN);
        ;
        mpfr_mul(r11230, r11225, r11227, MPFR_RNDN);
        mpfr_log1p(r11231, r11230, MPFR_RNDN);
        mpfr_expm1(r11232, r11231, MPFR_RNDN);
        mpfr_sub(r11233, r11229, r11232, MPFR_RNDN);
        mpfr_div(r11234, r11228, r11233, MPFR_RNDN);
        mpfr_sub(r11235, r11234, r11225, MPFR_RNDN);
        ;
        mpfr_set_si(r11237, mpfr_cmp(r11235, r11236) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r11239, mpfr_cmp(r11235, r11238) <= 0, MPFR_RNDN);
        mpfr_mul(r11240, r11226, r11224, MPFR_RNDN);
        mpfr_fma(r11241, r11240, r11240, r11240, MPFR_RNDN);
        mpfr_fma(r11242, r11226, r11241, r11226, MPFR_RNDN);
        mpfr_mul(r11243, r11227, r11225, MPFR_RNDN);
        ;
        mpfr_pow(r11245, r11243, r11244, MPFR_RNDN);
        mpfr_cbrt(r11246, r11245, MPFR_RNDN);
        mpfr_sub(r11247, r11229, r11246, MPFR_RNDN);
        mpfr_div(r11248, r11228, r11247, MPFR_RNDN);
        mpfr_sub(r11249, r11248, r11225, MPFR_RNDN);
        if (mpfr_get_si(r11239, MPFR_RNDN)) { mpfr_set(r11250, r11242, MPFR_RNDN); } else { mpfr_set(r11250, r11249, MPFR_RNDN); };
        if (mpfr_get_si(r11237, MPFR_RNDN)) { mpfr_set(r11251, r11235, MPFR_RNDN); } else { mpfr_set(r11251, r11250, MPFR_RNDN); };
        return mpfr_get_d(r11251, MPFR_RNDN);
}

