#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 r11149 = x;
        float r11150 = eps;
        float r11151 = r11149 + r11150;
        float r11152 = tan(r11151);
        float r11153 = tan(r11149);
        float r11154 = r11152 - r11153;
        return r11154;
}

double f_id(double x, double eps) {
        double r11155 = x;
        double r11156 = eps;
        double r11157 = r11155 + r11156;
        double r11158 = tan(r11157);
        double r11159 = tan(r11155);
        double r11160 = r11158 - r11159;
        return r11160;
}


double f_of(float x, float eps) {
        float r11161 = 1;
        float r11162 = x;
        float r11163 = sin(r11162);
        float r11164 = cos(r11162);
        float r11165 = r11163 / r11164;
        float r11166 = fma(r11165, r11165, r11161);
        float r11167 = eps;
        float r11168 = cos(r11167);
        float r11169 = r11163 / r11168;
        float r11170 = sin(r11167);
        float r11171 = r11170 / r11164;
        float r11172 = r11169 * r11171;
        float r11173 = r11172 * r11172;
        float r11174 = r11161 - r11173;
        float r11175 = r11166 / r11174;
        float r11176 = r11170 / r11168;
        float r11177 = -r11165;
        float r11178 = fma(r11176, r11176, r11161);
        float r11179 = r11178 * r11165;
        float r11180 = r11179 / r11174;
        float r11181 = r11177 + r11180;
        float r11182 = fma(r11175, r11176, r11181);
        float r11183 = r11161 * r11182;
        return r11183;
}

double f_od(double x, double eps) {
        double r11184 = 1;
        double r11185 = x;
        double r11186 = sin(r11185);
        double r11187 = cos(r11185);
        double r11188 = r11186 / r11187;
        double r11189 = fma(r11188, r11188, r11184);
        double r11190 = eps;
        double r11191 = cos(r11190);
        double r11192 = r11186 / r11191;
        double r11193 = sin(r11190);
        double r11194 = r11193 / r11187;
        double r11195 = r11192 * r11194;
        double r11196 = r11195 * r11195;
        double r11197 = r11184 - r11196;
        double r11198 = r11189 / r11197;
        double r11199 = r11193 / r11191;
        double r11200 = -r11188;
        double r11201 = fma(r11199, r11199, r11184);
        double r11202 = r11201 * r11188;
        double r11203 = r11202 / r11197;
        double r11204 = r11200 + r11203;
        double r11205 = fma(r11198, r11199, r11204);
        double r11206 = r11184 * r11205;
        return r11206;
}

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 r11207, r11208, r11209, r11210, r11211, r11212;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11207);
        mpfr_init(r11208);
        mpfr_init(r11209);
        mpfr_init(r11210);
        mpfr_init(r11211);
        mpfr_init(r11212);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11207, x, MPFR_RNDN);
        mpfr_set_d(r11208, eps, MPFR_RNDN);
        mpfr_add(r11209, r11207, r11208, MPFR_RNDN);
        mpfr_tan(r11210, r11209, MPFR_RNDN);
        mpfr_tan(r11211, r11207, MPFR_RNDN);
        mpfr_sub(r11212, r11210, r11211, MPFR_RNDN);
        return mpfr_get_d(r11212, MPFR_RNDN);
}

static mpfr_t r11213, r11214, r11215, r11216, r11217, r11218, r11219, r11220, r11221, r11222, r11223, r11224, r11225, r11226, r11227, r11228, r11229, r11230, r11231, r11232, r11233, r11234, r11235;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r11213, "1", 10, MPFR_RNDN);
        mpfr_init(r11214);
        mpfr_init(r11215);
        mpfr_init(r11216);
        mpfr_init(r11217);
        mpfr_init(r11218);
        mpfr_init(r11219);
        mpfr_init(r11220);
        mpfr_init(r11221);
        mpfr_init(r11222);
        mpfr_init(r11223);
        mpfr_init(r11224);
        mpfr_init(r11225);
        mpfr_init(r11226);
        mpfr_init(r11227);
        mpfr_init(r11228);
        mpfr_init(r11229);
        mpfr_init(r11230);
        mpfr_init(r11231);
        mpfr_init(r11232);
        mpfr_init(r11233);
        mpfr_init(r11234);
        mpfr_init(r11235);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r11214, x, MPFR_RNDN);
        mpfr_sin(r11215, r11214, MPFR_RNDN);
        mpfr_cos(r11216, r11214, MPFR_RNDN);
        mpfr_div(r11217, r11215, r11216, MPFR_RNDN);
        mpfr_fma(r11218, r11217, r11217, r11213, MPFR_RNDN);
        mpfr_set_d(r11219, eps, MPFR_RNDN);
        mpfr_cos(r11220, r11219, MPFR_RNDN);
        mpfr_div(r11221, r11215, r11220, MPFR_RNDN);
        mpfr_sin(r11222, r11219, MPFR_RNDN);
        mpfr_div(r11223, r11222, r11216, MPFR_RNDN);
        mpfr_mul(r11224, r11221, r11223, MPFR_RNDN);
        mpfr_mul(r11225, r11224, r11224, MPFR_RNDN);
        mpfr_sub(r11226, r11213, r11225, MPFR_RNDN);
        mpfr_div(r11227, r11218, r11226, MPFR_RNDN);
        mpfr_div(r11228, r11222, r11220, MPFR_RNDN);
        mpfr_neg(r11229, r11217, MPFR_RNDN);
        mpfr_fma(r11230, r11228, r11228, r11213, MPFR_RNDN);
        mpfr_mul(r11231, r11230, r11217, MPFR_RNDN);
        mpfr_div(r11232, r11231, r11226, MPFR_RNDN);
        mpfr_add(r11233, r11229, r11232, MPFR_RNDN);
        mpfr_fma(r11234, r11227, r11228, r11233, MPFR_RNDN);
        mpfr_mul(r11235, r11213, r11234, MPFR_RNDN);
        return mpfr_get_d(r11235, MPFR_RNDN);
}

static mpfr_t r11236, r11237, r11238, r11239, r11240, r11241, r11242, r11243, r11244, r11245, r11246, r11247, r11248, r11249, r11250, r11251, r11252, r11253, r11254, r11255, r11256, r11257, r11258;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r11236, "1", 10, MPFR_RNDN);
        mpfr_init(r11237);
        mpfr_init(r11238);
        mpfr_init(r11239);
        mpfr_init(r11240);
        mpfr_init(r11241);
        mpfr_init(r11242);
        mpfr_init(r11243);
        mpfr_init(r11244);
        mpfr_init(r11245);
        mpfr_init(r11246);
        mpfr_init(r11247);
        mpfr_init(r11248);
        mpfr_init(r11249);
        mpfr_init(r11250);
        mpfr_init(r11251);
        mpfr_init(r11252);
        mpfr_init(r11253);
        mpfr_init(r11254);
        mpfr_init(r11255);
        mpfr_init(r11256);
        mpfr_init(r11257);
        mpfr_init(r11258);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r11237, x, MPFR_RNDN);
        mpfr_sin(r11238, r11237, MPFR_RNDN);
        mpfr_cos(r11239, r11237, MPFR_RNDN);
        mpfr_div(r11240, r11238, r11239, MPFR_RNDN);
        mpfr_fma(r11241, r11240, r11240, r11236, MPFR_RNDN);
        mpfr_set_d(r11242, eps, MPFR_RNDN);
        mpfr_cos(r11243, r11242, MPFR_RNDN);
        mpfr_div(r11244, r11238, r11243, MPFR_RNDN);
        mpfr_sin(r11245, r11242, MPFR_RNDN);
        mpfr_div(r11246, r11245, r11239, MPFR_RNDN);
        mpfr_mul(r11247, r11244, r11246, MPFR_RNDN);
        mpfr_mul(r11248, r11247, r11247, MPFR_RNDN);
        mpfr_sub(r11249, r11236, r11248, MPFR_RNDN);
        mpfr_div(r11250, r11241, r11249, MPFR_RNDN);
        mpfr_div(r11251, r11245, r11243, MPFR_RNDN);
        mpfr_neg(r11252, r11240, MPFR_RNDN);
        mpfr_fma(r11253, r11251, r11251, r11236, MPFR_RNDN);
        mpfr_mul(r11254, r11253, r11240, MPFR_RNDN);
        mpfr_div(r11255, r11254, r11249, MPFR_RNDN);
        mpfr_add(r11256, r11252, r11255, MPFR_RNDN);
        mpfr_fma(r11257, r11250, r11251, r11256, MPFR_RNDN);
        mpfr_mul(r11258, r11236, r11257, MPFR_RNDN);
        return mpfr_get_d(r11258, MPFR_RNDN);
}

