#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 r27167 = x;
        float r27168 = eps;
        float r27169 = r27167 + r27168;
        float r27170 = tan(r27169);
        float r27171 = tan(r27167);
        float r27172 = r27170 - r27171;
        return r27172;
}

double f_id(double x, double eps) {
        double r27173 = x;
        double r27174 = eps;
        double r27175 = r27173 + r27174;
        double r27176 = tan(r27175);
        double r27177 = tan(r27173);
        double r27178 = r27176 - r27177;
        return r27178;
}


double f_of(float x, float eps) {
        float r27179 = eps;
        float r27180 = sin(r27179);
        float r27181 = cos(r27179);
        float r27182 = r27180 / r27181;
        float r27183 = x;
        float r27184 = cos(r27183);
        float r27185 = tan(r27183);
        float r27186 = r27184 * r27185;
        float r27187 = tan(r27179);
        float r27188 = r27186 * r27187;
        float r27189 = r27184 - r27188;
        float r27190 = sin(r27183);
        float r27191 = r27190 * r27190;
        float r27192 = r27191 / r27184;
        float r27193 = r27184 + r27192;
        float r27194 = r27189 / r27193;
        float r27195 = r27182 / r27194;
        return r27195;
}

double f_od(double x, double eps) {
        double r27196 = eps;
        double r27197 = sin(r27196);
        double r27198 = cos(r27196);
        double r27199 = r27197 / r27198;
        double r27200 = x;
        double r27201 = cos(r27200);
        double r27202 = tan(r27200);
        double r27203 = r27201 * r27202;
        double r27204 = tan(r27196);
        double r27205 = r27203 * r27204;
        double r27206 = r27201 - r27205;
        double r27207 = sin(r27200);
        double r27208 = r27207 * r27207;
        double r27209 = r27208 / r27201;
        double r27210 = r27201 + r27209;
        double r27211 = r27206 / r27210;
        double r27212 = r27199 / r27211;
        return r27212;
}

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 r27213, r27214, r27215, r27216, r27217, r27218;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27213);
        mpfr_init(r27214);
        mpfr_init(r27215);
        mpfr_init(r27216);
        mpfr_init(r27217);
        mpfr_init(r27218);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27213, x, MPFR_RNDN);
        mpfr_set_d(r27214, eps, MPFR_RNDN);
        mpfr_add(r27215, r27213, r27214, MPFR_RNDN);
        mpfr_tan(r27216, r27215, MPFR_RNDN);
        mpfr_tan(r27217, r27213, MPFR_RNDN);
        mpfr_sub(r27218, r27216, r27217, MPFR_RNDN);
        return mpfr_get_d(r27218, MPFR_RNDN);
}

static mpfr_t r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229, r27230, r27231, r27232, r27233, r27234, r27235;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27219);
        mpfr_init(r27220);
        mpfr_init(r27221);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init(r27226);
        mpfr_init(r27227);
        mpfr_init(r27228);
        mpfr_init(r27229);
        mpfr_init(r27230);
        mpfr_init(r27231);
        mpfr_init(r27232);
        mpfr_init(r27233);
        mpfr_init(r27234);
        mpfr_init(r27235);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27219, eps, MPFR_RNDN);
        mpfr_sin(r27220, r27219, MPFR_RNDN);
        mpfr_cos(r27221, r27219, MPFR_RNDN);
        mpfr_div(r27222, r27220, r27221, MPFR_RNDN);
        mpfr_set_d(r27223, x, MPFR_RNDN);
        mpfr_cos(r27224, r27223, MPFR_RNDN);
        mpfr_tan(r27225, r27223, MPFR_RNDN);
        mpfr_mul(r27226, r27224, r27225, MPFR_RNDN);
        mpfr_tan(r27227, r27219, MPFR_RNDN);
        mpfr_mul(r27228, r27226, r27227, MPFR_RNDN);
        mpfr_sub(r27229, r27224, r27228, MPFR_RNDN);
        mpfr_sin(r27230, r27223, MPFR_RNDN);
        mpfr_mul(r27231, r27230, r27230, MPFR_RNDN);
        mpfr_div(r27232, r27231, r27224, MPFR_RNDN);
        mpfr_add(r27233, r27224, r27232, MPFR_RNDN);
        mpfr_div(r27234, r27229, r27233, MPFR_RNDN);
        mpfr_div(r27235, r27222, r27234, MPFR_RNDN);
        return mpfr_get_d(r27235, MPFR_RNDN);
}

static mpfr_t r27236, r27237, r27238, r27239, r27240, r27241, r27242, r27243, r27244, r27245, r27246, r27247, r27248, r27249, r27250, r27251, r27252;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27236);
        mpfr_init(r27237);
        mpfr_init(r27238);
        mpfr_init(r27239);
        mpfr_init(r27240);
        mpfr_init(r27241);
        mpfr_init(r27242);
        mpfr_init(r27243);
        mpfr_init(r27244);
        mpfr_init(r27245);
        mpfr_init(r27246);
        mpfr_init(r27247);
        mpfr_init(r27248);
        mpfr_init(r27249);
        mpfr_init(r27250);
        mpfr_init(r27251);
        mpfr_init(r27252);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27236, eps, MPFR_RNDN);
        mpfr_sin(r27237, r27236, MPFR_RNDN);
        mpfr_cos(r27238, r27236, MPFR_RNDN);
        mpfr_div(r27239, r27237, r27238, MPFR_RNDN);
        mpfr_set_d(r27240, x, MPFR_RNDN);
        mpfr_cos(r27241, r27240, MPFR_RNDN);
        mpfr_tan(r27242, r27240, MPFR_RNDN);
        mpfr_mul(r27243, r27241, r27242, MPFR_RNDN);
        mpfr_tan(r27244, r27236, MPFR_RNDN);
        mpfr_mul(r27245, r27243, r27244, MPFR_RNDN);
        mpfr_sub(r27246, r27241, r27245, MPFR_RNDN);
        mpfr_sin(r27247, r27240, MPFR_RNDN);
        mpfr_mul(r27248, r27247, r27247, MPFR_RNDN);
        mpfr_div(r27249, r27248, r27241, MPFR_RNDN);
        mpfr_add(r27250, r27241, r27249, MPFR_RNDN);
        mpfr_div(r27251, r27246, r27250, MPFR_RNDN);
        mpfr_div(r27252, r27239, r27251, MPFR_RNDN);
        return mpfr_get_d(r27252, MPFR_RNDN);
}

