#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 r27125 = x;
        float r27126 = eps;
        float r27127 = r27125 + r27126;
        float r27128 = tan(r27127);
        float r27129 = tan(r27125);
        float r27130 = r27128 - r27129;
        return r27130;
}

double f_id(double x, double eps) {
        double r27131 = x;
        double r27132 = eps;
        double r27133 = r27131 + r27132;
        double r27134 = tan(r27133);
        double r27135 = tan(r27131);
        double r27136 = r27134 - r27135;
        return r27136;
}


double f_of(float x, float eps) {
        float r27137 = x;
        float r27138 = cos(r27137);
        float r27139 = sin(r27137);
        float r27140 = r27139 / r27138;
        float r27141 = r27139 * r27140;
        float r27142 = r27138 + r27141;
        float r27143 = eps;
        float r27144 = sin(r27143);
        float r27145 = cos(r27143);
        float r27146 = r27144 / r27145;
        float r27147 = r27142 * r27146;
        float r27148 = r27139 * r27138;
        float r27149 = r27138 * r27145;
        float r27150 = r27149 / r27144;
        float r27151 = r27148 / r27150;
        float r27152 = r27138 - r27151;
        float r27153 = r27147 / r27152;
        return r27153;
}

double f_od(double x, double eps) {
        double r27154 = x;
        double r27155 = cos(r27154);
        double r27156 = sin(r27154);
        double r27157 = r27156 / r27155;
        double r27158 = r27156 * r27157;
        double r27159 = r27155 + r27158;
        double r27160 = eps;
        double r27161 = sin(r27160);
        double r27162 = cos(r27160);
        double r27163 = r27161 / r27162;
        double r27164 = r27159 * r27163;
        double r27165 = r27156 * r27155;
        double r27166 = r27155 * r27162;
        double r27167 = r27166 / r27161;
        double r27168 = r27165 / r27167;
        double r27169 = r27155 - r27168;
        double r27170 = r27164 / r27169;
        return r27170;
}

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 r27171, r27172, r27173, r27174, r27175, r27176;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27171);
        mpfr_init(r27172);
        mpfr_init(r27173);
        mpfr_init(r27174);
        mpfr_init(r27175);
        mpfr_init(r27176);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27171, x, MPFR_RNDN);
        mpfr_set_d(r27172, eps, MPFR_RNDN);
        mpfr_add(r27173, r27171, r27172, MPFR_RNDN);
        mpfr_tan(r27174, r27173, MPFR_RNDN);
        mpfr_tan(r27175, r27171, MPFR_RNDN);
        mpfr_sub(r27176, r27174, r27175, MPFR_RNDN);
        return mpfr_get_d(r27176, MPFR_RNDN);
}

static mpfr_t r27177, r27178, r27179, r27180, r27181, r27182, r27183, r27184, r27185, r27186, r27187, r27188, r27189, r27190, r27191, r27192, r27193;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27177);
        mpfr_init(r27178);
        mpfr_init(r27179);
        mpfr_init(r27180);
        mpfr_init(r27181);
        mpfr_init(r27182);
        mpfr_init(r27183);
        mpfr_init(r27184);
        mpfr_init(r27185);
        mpfr_init(r27186);
        mpfr_init(r27187);
        mpfr_init(r27188);
        mpfr_init(r27189);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27177, x, MPFR_RNDN);
        mpfr_cos(r27178, r27177, MPFR_RNDN);
        mpfr_sin(r27179, r27177, MPFR_RNDN);
        mpfr_div(r27180, r27179, r27178, MPFR_RNDN);
        mpfr_mul(r27181, r27179, r27180, MPFR_RNDN);
        mpfr_add(r27182, r27178, r27181, MPFR_RNDN);
        mpfr_set_d(r27183, eps, MPFR_RNDN);
        mpfr_sin(r27184, r27183, MPFR_RNDN);
        mpfr_cos(r27185, r27183, MPFR_RNDN);
        mpfr_div(r27186, r27184, r27185, MPFR_RNDN);
        mpfr_mul(r27187, r27182, r27186, MPFR_RNDN);
        mpfr_mul(r27188, r27179, r27178, MPFR_RNDN);
        mpfr_mul(r27189, r27178, r27185, MPFR_RNDN);
        mpfr_div(r27190, r27189, r27184, MPFR_RNDN);
        mpfr_div(r27191, r27188, r27190, MPFR_RNDN);
        mpfr_sub(r27192, r27178, r27191, MPFR_RNDN);
        mpfr_div(r27193, r27187, r27192, MPFR_RNDN);
        return mpfr_get_d(r27193, MPFR_RNDN);
}

static mpfr_t r27194, r27195, r27196, r27197, r27198, r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27194);
        mpfr_init(r27195);
        mpfr_init(r27196);
        mpfr_init(r27197);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init(r27203);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init(r27210);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27194, x, MPFR_RNDN);
        mpfr_cos(r27195, r27194, MPFR_RNDN);
        mpfr_sin(r27196, r27194, MPFR_RNDN);
        mpfr_div(r27197, r27196, r27195, MPFR_RNDN);
        mpfr_mul(r27198, r27196, r27197, MPFR_RNDN);
        mpfr_add(r27199, r27195, r27198, MPFR_RNDN);
        mpfr_set_d(r27200, eps, MPFR_RNDN);
        mpfr_sin(r27201, r27200, MPFR_RNDN);
        mpfr_cos(r27202, r27200, MPFR_RNDN);
        mpfr_div(r27203, r27201, r27202, MPFR_RNDN);
        mpfr_mul(r27204, r27199, r27203, MPFR_RNDN);
        mpfr_mul(r27205, r27196, r27195, MPFR_RNDN);
        mpfr_mul(r27206, r27195, r27202, MPFR_RNDN);
        mpfr_div(r27207, r27206, r27201, MPFR_RNDN);
        mpfr_div(r27208, r27205, r27207, MPFR_RNDN);
        mpfr_sub(r27209, r27195, r27208, MPFR_RNDN);
        mpfr_div(r27210, r27204, r27209, MPFR_RNDN);
        return mpfr_get_d(r27210, MPFR_RNDN);
}

