#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 r27047 = x;
        float r27048 = eps;
        float r27049 = r27047 + r27048;
        float r27050 = tan(r27049);
        float r27051 = tan(r27047);
        float r27052 = r27050 - r27051;
        return r27052;
}

double f_id(double x, double eps) {
        double r27053 = x;
        double r27054 = eps;
        double r27055 = r27053 + r27054;
        double r27056 = tan(r27055);
        double r27057 = tan(r27053);
        double r27058 = r27056 - r27057;
        return r27058;
}


double f_of(float x, float eps) {
        float r27059 = eps;
        float r27060 = tan(r27059);
        float r27061 = -2.1880632665968565e-06;
        bool r27062 = r27060 <= r27061;
        float r27063 = x;
        float r27064 = tan(r27063);
        float r27065 = r27060 + r27064;
        float r27066 = r27064 * r27060;
        float r27067 = fma(r27066, r27066, r27066);
        float r27068 = fma(r27065, r27067, r27065);
        float r27069 = 1;
        float r27070 = sin(r27059);
        float r27071 = r27070 * r27064;
        float r27072 = 3;
        float r27073 = pow(r27071, r27072);
        float r27074 = cos(r27059);
        float r27075 = pow(r27074, r27072);
        float r27076 = r27073 / r27075;
        float r27077 = r27069 - r27076;
        float r27078 = r27068 / r27077;
        float r27079 = r27078 - r27064;
        float r27080 = 3.601930261402066e-13;
        bool r27081 = r27060 <= r27080;
        float r27082 = r27059 * r27063;
        float r27083 = fma(r27082, r27059, r27059);
        float r27084 = fma(r27082, r27083, r27059);
        float r27085 = r27066 * r27066;
        float r27086 = r27069 - r27085;
        float r27087 = r27065 / r27086;
        float r27088 = r27066 + r27069;
        float r27089 = -r27064;
        float r27090 = fma(r27087, r27088, r27089);
        float r27091 = r27081 ? r27084 : r27090;
        float r27092 = r27062 ? r27079 : r27091;
        return r27092;
}

double f_od(double x, double eps) {
        double r27093 = eps;
        double r27094 = tan(r27093);
        double r27095 = -2.1880632665968565e-06;
        bool r27096 = r27094 <= r27095;
        double r27097 = x;
        double r27098 = tan(r27097);
        double r27099 = r27094 + r27098;
        double r27100 = r27098 * r27094;
        double r27101 = fma(r27100, r27100, r27100);
        double r27102 = fma(r27099, r27101, r27099);
        double r27103 = 1;
        double r27104 = sin(r27093);
        double r27105 = r27104 * r27098;
        double r27106 = 3;
        double r27107 = pow(r27105, r27106);
        double r27108 = cos(r27093);
        double r27109 = pow(r27108, r27106);
        double r27110 = r27107 / r27109;
        double r27111 = r27103 - r27110;
        double r27112 = r27102 / r27111;
        double r27113 = r27112 - r27098;
        double r27114 = 3.601930261402066e-13;
        bool r27115 = r27094 <= r27114;
        double r27116 = r27093 * r27097;
        double r27117 = fma(r27116, r27093, r27093);
        double r27118 = fma(r27116, r27117, r27093);
        double r27119 = r27100 * r27100;
        double r27120 = r27103 - r27119;
        double r27121 = r27099 / r27120;
        double r27122 = r27100 + r27103;
        double r27123 = -r27098;
        double r27124 = fma(r27121, r27122, r27123);
        double r27125 = r27115 ? r27118 : r27124;
        double r27126 = r27096 ? r27113 : r27125;
        return r27126;
}

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 r27127, r27128, r27129, r27130, r27131, r27132;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27127);
        mpfr_init(r27128);
        mpfr_init(r27129);
        mpfr_init(r27130);
        mpfr_init(r27131);
        mpfr_init(r27132);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27127, x, MPFR_RNDN);
        mpfr_set_d(r27128, eps, MPFR_RNDN);
        mpfr_add(r27129, r27127, r27128, MPFR_RNDN);
        mpfr_tan(r27130, r27129, MPFR_RNDN);
        mpfr_tan(r27131, r27127, MPFR_RNDN);
        mpfr_sub(r27132, r27130, r27131, MPFR_RNDN);
        return mpfr_get_d(r27132, MPFR_RNDN);
}

static mpfr_t r27133, r27134, r27135, r27136, r27137, r27138, r27139, r27140, r27141, r27142, r27143, r27144, r27145, r27146, r27147, r27148, r27149, r27150, r27151, r27152, r27153, r27154, r27155, r27156, r27157, r27158, r27159, r27160, r27161, r27162, r27163, r27164, r27165, r27166;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27133);
        mpfr_init(r27134);
        mpfr_init_set_str(r27135, "-2.1880632665968565e-06", 10, MPFR_RNDN);
        mpfr_init(r27136);
        mpfr_init(r27137);
        mpfr_init(r27138);
        mpfr_init(r27139);
        mpfr_init(r27140);
        mpfr_init(r27141);
        mpfr_init(r27142);
        mpfr_init_set_str(r27143, "1", 10, MPFR_RNDN);
        mpfr_init(r27144);
        mpfr_init(r27145);
        mpfr_init_set_str(r27146, "3", 10, MPFR_RNDN);
        mpfr_init(r27147);
        mpfr_init(r27148);
        mpfr_init(r27149);
        mpfr_init(r27150);
        mpfr_init(r27151);
        mpfr_init(r27152);
        mpfr_init(r27153);
        mpfr_init_set_str(r27154, "3.601930261402066e-13", 10, MPFR_RNDN);
        mpfr_init(r27155);
        mpfr_init(r27156);
        mpfr_init(r27157);
        mpfr_init(r27158);
        mpfr_init(r27159);
        mpfr_init(r27160);
        mpfr_init(r27161);
        mpfr_init(r27162);
        mpfr_init(r27163);
        mpfr_init(r27164);
        mpfr_init(r27165);
        mpfr_init(r27166);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27133, eps, MPFR_RNDN);
        mpfr_tan(r27134, r27133, MPFR_RNDN);
        ;
        mpfr_set_si(r27136, mpfr_cmp(r27134, r27135) <= 0, MPFR_RNDN);
        mpfr_set_d(r27137, x, MPFR_RNDN);
        mpfr_tan(r27138, r27137, MPFR_RNDN);
        mpfr_add(r27139, r27134, r27138, MPFR_RNDN);
        mpfr_mul(r27140, r27138, r27134, MPFR_RNDN);
        mpfr_fma(r27141, r27140, r27140, r27140, MPFR_RNDN);
        mpfr_fma(r27142, r27139, r27141, r27139, MPFR_RNDN);
        ;
        mpfr_sin(r27144, r27133, MPFR_RNDN);
        mpfr_mul(r27145, r27144, r27138, MPFR_RNDN);
        ;
        mpfr_pow(r27147, r27145, r27146, MPFR_RNDN);
        mpfr_cos(r27148, r27133, MPFR_RNDN);
        mpfr_pow(r27149, r27148, r27146, MPFR_RNDN);
        mpfr_div(r27150, r27147, r27149, MPFR_RNDN);
        mpfr_sub(r27151, r27143, r27150, MPFR_RNDN);
        mpfr_div(r27152, r27142, r27151, MPFR_RNDN);
        mpfr_sub(r27153, r27152, r27138, MPFR_RNDN);
        ;
        mpfr_set_si(r27155, mpfr_cmp(r27134, r27154) <= 0, MPFR_RNDN);
        mpfr_mul(r27156, r27133, r27137, MPFR_RNDN);
        mpfr_fma(r27157, r27156, r27133, r27133, MPFR_RNDN);
        mpfr_fma(r27158, r27156, r27157, r27133, MPFR_RNDN);
        mpfr_mul(r27159, r27140, r27140, MPFR_RNDN);
        mpfr_sub(r27160, r27143, r27159, MPFR_RNDN);
        mpfr_div(r27161, r27139, r27160, MPFR_RNDN);
        mpfr_add(r27162, r27140, r27143, MPFR_RNDN);
        mpfr_neg(r27163, r27138, MPFR_RNDN);
        mpfr_fma(r27164, r27161, r27162, r27163, MPFR_RNDN);
        if (mpfr_get_si(r27155, MPFR_RNDN)) { mpfr_set(r27165, r27158, MPFR_RNDN); } else { mpfr_set(r27165, r27164, MPFR_RNDN); };
        if (mpfr_get_si(r27136, MPFR_RNDN)) { mpfr_set(r27166, r27153, MPFR_RNDN); } else { mpfr_set(r27166, r27165, MPFR_RNDN); };
        return mpfr_get_d(r27166, MPFR_RNDN);
}

static mpfr_t r27167, r27168, r27169, r27170, r27171, r27172, r27173, r27174, r27175, r27176, r27177, r27178, r27179, r27180, r27181, r27182, r27183, r27184, r27185, r27186, r27187, r27188, r27189, r27190, r27191, r27192, r27193, r27194, r27195, r27196, r27197, r27198, r27199, r27200;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27167);
        mpfr_init(r27168);
        mpfr_init_set_str(r27169, "-2.1880632665968565e-06", 10, MPFR_RNDN);
        mpfr_init(r27170);
        mpfr_init(r27171);
        mpfr_init(r27172);
        mpfr_init(r27173);
        mpfr_init(r27174);
        mpfr_init(r27175);
        mpfr_init(r27176);
        mpfr_init_set_str(r27177, "1", 10, MPFR_RNDN);
        mpfr_init(r27178);
        mpfr_init(r27179);
        mpfr_init_set_str(r27180, "3", 10, MPFR_RNDN);
        mpfr_init(r27181);
        mpfr_init(r27182);
        mpfr_init(r27183);
        mpfr_init(r27184);
        mpfr_init(r27185);
        mpfr_init(r27186);
        mpfr_init(r27187);
        mpfr_init_set_str(r27188, "3.601930261402066e-13", 10, MPFR_RNDN);
        mpfr_init(r27189);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
        mpfr_init(r27194);
        mpfr_init(r27195);
        mpfr_init(r27196);
        mpfr_init(r27197);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27167, eps, MPFR_RNDN);
        mpfr_tan(r27168, r27167, MPFR_RNDN);
        ;
        mpfr_set_si(r27170, mpfr_cmp(r27168, r27169) <= 0, MPFR_RNDN);
        mpfr_set_d(r27171, x, MPFR_RNDN);
        mpfr_tan(r27172, r27171, MPFR_RNDN);
        mpfr_add(r27173, r27168, r27172, MPFR_RNDN);
        mpfr_mul(r27174, r27172, r27168, MPFR_RNDN);
        mpfr_fma(r27175, r27174, r27174, r27174, MPFR_RNDN);
        mpfr_fma(r27176, r27173, r27175, r27173, MPFR_RNDN);
        ;
        mpfr_sin(r27178, r27167, MPFR_RNDN);
        mpfr_mul(r27179, r27178, r27172, MPFR_RNDN);
        ;
        mpfr_pow(r27181, r27179, r27180, MPFR_RNDN);
        mpfr_cos(r27182, r27167, MPFR_RNDN);
        mpfr_pow(r27183, r27182, r27180, MPFR_RNDN);
        mpfr_div(r27184, r27181, r27183, MPFR_RNDN);
        mpfr_sub(r27185, r27177, r27184, MPFR_RNDN);
        mpfr_div(r27186, r27176, r27185, MPFR_RNDN);
        mpfr_sub(r27187, r27186, r27172, MPFR_RNDN);
        ;
        mpfr_set_si(r27189, mpfr_cmp(r27168, r27188) <= 0, MPFR_RNDN);
        mpfr_mul(r27190, r27167, r27171, MPFR_RNDN);
        mpfr_fma(r27191, r27190, r27167, r27167, MPFR_RNDN);
        mpfr_fma(r27192, r27190, r27191, r27167, MPFR_RNDN);
        mpfr_mul(r27193, r27174, r27174, MPFR_RNDN);
        mpfr_sub(r27194, r27177, r27193, MPFR_RNDN);
        mpfr_div(r27195, r27173, r27194, MPFR_RNDN);
        mpfr_add(r27196, r27174, r27177, MPFR_RNDN);
        mpfr_neg(r27197, r27172, MPFR_RNDN);
        mpfr_fma(r27198, r27195, r27196, r27197, MPFR_RNDN);
        if (mpfr_get_si(r27189, MPFR_RNDN)) { mpfr_set(r27199, r27192, MPFR_RNDN); } else { mpfr_set(r27199, r27198, MPFR_RNDN); };
        if (mpfr_get_si(r27170, MPFR_RNDN)) { mpfr_set(r27200, r27187, MPFR_RNDN); } else { mpfr_set(r27200, r27199, MPFR_RNDN); };
        return mpfr_get_d(r27200, MPFR_RNDN);
}

