#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 r11057 = x;
        float r11058 = eps;
        float r11059 = r11057 + r11058;
        float r11060 = tan(r11059);
        float r11061 = tan(r11057);
        float r11062 = r11060 - r11061;
        return r11062;
}

double f_id(double x, double eps) {
        double r11063 = x;
        double r11064 = eps;
        double r11065 = r11063 + r11064;
        double r11066 = tan(r11065);
        double r11067 = tan(r11063);
        double r11068 = r11066 - r11067;
        return r11068;
}


double f_of(float x, float eps) {
        float r11069 = eps;
        float r11070 = -1.0863019201477782e-24;
        bool r11071 = r11069 <= r11070;
        float r11072 = x;
        float r11073 = tan(r11072);
        float r11074 = cbrt(r11073);
        float r11075 = r11074 * r11074;
        float r11076 = tan(r11069);
        float r11077 = fma(r11075, r11074, r11076);
        float r11078 = 1;
        float r11079 = r11073 * r11076;
        float r11080 = r11078 - r11079;
        float r11081 = r11077 / r11080;
        float r11082 = r11081 - r11073;
        float r11083 = 5.068526259562942e-24;
        bool r11084 = r11069 <= r11083;
        float r11085 = r11072 * r11069;
        float r11086 = fma(r11085, r11069, r11069);
        float r11087 = fma(r11085, r11086, r11069);
        float r11088 = r11073 + r11076;
        float r11089 = r11078 / r11080;
        float r11090 = -r11073;
        float r11091 = fma(r11088, r11089, r11090);
        float r11092 = r11084 ? r11087 : r11091;
        float r11093 = r11071 ? r11082 : r11092;
        return r11093;
}

double f_od(double x, double eps) {
        double r11094 = eps;
        double r11095 = -1.0863019201477782e-24;
        bool r11096 = r11094 <= r11095;
        double r11097 = x;
        double r11098 = tan(r11097);
        double r11099 = cbrt(r11098);
        double r11100 = r11099 * r11099;
        double r11101 = tan(r11094);
        double r11102 = fma(r11100, r11099, r11101);
        double r11103 = 1;
        double r11104 = r11098 * r11101;
        double r11105 = r11103 - r11104;
        double r11106 = r11102 / r11105;
        double r11107 = r11106 - r11098;
        double r11108 = 5.068526259562942e-24;
        bool r11109 = r11094 <= r11108;
        double r11110 = r11097 * r11094;
        double r11111 = fma(r11110, r11094, r11094);
        double r11112 = fma(r11110, r11111, r11094);
        double r11113 = r11098 + r11101;
        double r11114 = r11103 / r11105;
        double r11115 = -r11098;
        double r11116 = fma(r11113, r11114, r11115);
        double r11117 = r11109 ? r11112 : r11116;
        double r11118 = r11096 ? r11107 : r11117;
        return r11118;
}

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 r11119, r11120, r11121, r11122, r11123, r11124;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11119);
        mpfr_init(r11120);
        mpfr_init(r11121);
        mpfr_init(r11122);
        mpfr_init(r11123);
        mpfr_init(r11124);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11119, x, MPFR_RNDN);
        mpfr_set_d(r11120, eps, MPFR_RNDN);
        mpfr_add(r11121, r11119, r11120, MPFR_RNDN);
        mpfr_tan(r11122, r11121, MPFR_RNDN);
        mpfr_tan(r11123, r11119, MPFR_RNDN);
        mpfr_sub(r11124, r11122, r11123, MPFR_RNDN);
        return mpfr_get_d(r11124, MPFR_RNDN);
}

static mpfr_t r11125, r11126, r11127, r11128, r11129, r11130, r11131, r11132, r11133, r11134, r11135, r11136, r11137, r11138, r11139, r11140, r11141, r11142, r11143, r11144, r11145, r11146, r11147, r11148, r11149;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11125);
        mpfr_init_set_str(r11126, "-1.0863019201477782e-24", 10, MPFR_RNDN);
        mpfr_init(r11127);
        mpfr_init(r11128);
        mpfr_init(r11129);
        mpfr_init(r11130);
        mpfr_init(r11131);
        mpfr_init(r11132);
        mpfr_init(r11133);
        mpfr_init_set_str(r11134, "1", 10, MPFR_RNDN);
        mpfr_init(r11135);
        mpfr_init(r11136);
        mpfr_init(r11137);
        mpfr_init(r11138);
        mpfr_init_set_str(r11139, "5.068526259562942e-24", 10, MPFR_RNDN);
        mpfr_init(r11140);
        mpfr_init(r11141);
        mpfr_init(r11142);
        mpfr_init(r11143);
        mpfr_init(r11144);
        mpfr_init(r11145);
        mpfr_init(r11146);
        mpfr_init(r11147);
        mpfr_init(r11148);
        mpfr_init(r11149);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11125, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r11127, mpfr_cmp(r11125, r11126) <= 0, MPFR_RNDN);
        mpfr_set_d(r11128, x, MPFR_RNDN);
        mpfr_tan(r11129, r11128, MPFR_RNDN);
        mpfr_cbrt(r11130, r11129, MPFR_RNDN);
        mpfr_mul(r11131, r11130, r11130, MPFR_RNDN);
        mpfr_tan(r11132, r11125, MPFR_RNDN);
        mpfr_fma(r11133, r11131, r11130, r11132, MPFR_RNDN);
        ;
        mpfr_mul(r11135, r11129, r11132, MPFR_RNDN);
        mpfr_sub(r11136, r11134, r11135, MPFR_RNDN);
        mpfr_div(r11137, r11133, r11136, MPFR_RNDN);
        mpfr_sub(r11138, r11137, r11129, MPFR_RNDN);
        ;
        mpfr_set_si(r11140, mpfr_cmp(r11125, r11139) <= 0, MPFR_RNDN);
        mpfr_mul(r11141, r11128, r11125, MPFR_RNDN);
        mpfr_fma(r11142, r11141, r11125, r11125, MPFR_RNDN);
        mpfr_fma(r11143, r11141, r11142, r11125, MPFR_RNDN);
        mpfr_add(r11144, r11129, r11132, MPFR_RNDN);
        mpfr_div(r11145, r11134, r11136, MPFR_RNDN);
        mpfr_neg(r11146, r11129, MPFR_RNDN);
        mpfr_fma(r11147, r11144, r11145, r11146, MPFR_RNDN);
        if (mpfr_get_si(r11140, MPFR_RNDN)) { mpfr_set(r11148, r11143, MPFR_RNDN); } else { mpfr_set(r11148, r11147, MPFR_RNDN); };
        if (mpfr_get_si(r11127, MPFR_RNDN)) { mpfr_set(r11149, r11138, MPFR_RNDN); } else { mpfr_set(r11149, r11148, MPFR_RNDN); };
        return mpfr_get_d(r11149, MPFR_RNDN);
}

static mpfr_t r11150, r11151, r11152, r11153, r11154, r11155, r11156, r11157, r11158, r11159, r11160, r11161, r11162, r11163, r11164, r11165, r11166, r11167, r11168, r11169, r11170, r11171, r11172, r11173, r11174;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11150);
        mpfr_init_set_str(r11151, "-1.0863019201477782e-24", 10, MPFR_RNDN);
        mpfr_init(r11152);
        mpfr_init(r11153);
        mpfr_init(r11154);
        mpfr_init(r11155);
        mpfr_init(r11156);
        mpfr_init(r11157);
        mpfr_init(r11158);
        mpfr_init_set_str(r11159, "1", 10, MPFR_RNDN);
        mpfr_init(r11160);
        mpfr_init(r11161);
        mpfr_init(r11162);
        mpfr_init(r11163);
        mpfr_init_set_str(r11164, "5.068526259562942e-24", 10, MPFR_RNDN);
        mpfr_init(r11165);
        mpfr_init(r11166);
        mpfr_init(r11167);
        mpfr_init(r11168);
        mpfr_init(r11169);
        mpfr_init(r11170);
        mpfr_init(r11171);
        mpfr_init(r11172);
        mpfr_init(r11173);
        mpfr_init(r11174);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11150, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r11152, mpfr_cmp(r11150, r11151) <= 0, MPFR_RNDN);
        mpfr_set_d(r11153, x, MPFR_RNDN);
        mpfr_tan(r11154, r11153, MPFR_RNDN);
        mpfr_cbrt(r11155, r11154, MPFR_RNDN);
        mpfr_mul(r11156, r11155, r11155, MPFR_RNDN);
        mpfr_tan(r11157, r11150, MPFR_RNDN);
        mpfr_fma(r11158, r11156, r11155, r11157, MPFR_RNDN);
        ;
        mpfr_mul(r11160, r11154, r11157, MPFR_RNDN);
        mpfr_sub(r11161, r11159, r11160, MPFR_RNDN);
        mpfr_div(r11162, r11158, r11161, MPFR_RNDN);
        mpfr_sub(r11163, r11162, r11154, MPFR_RNDN);
        ;
        mpfr_set_si(r11165, mpfr_cmp(r11150, r11164) <= 0, MPFR_RNDN);
        mpfr_mul(r11166, r11153, r11150, MPFR_RNDN);
        mpfr_fma(r11167, r11166, r11150, r11150, MPFR_RNDN);
        mpfr_fma(r11168, r11166, r11167, r11150, MPFR_RNDN);
        mpfr_add(r11169, r11154, r11157, MPFR_RNDN);
        mpfr_div(r11170, r11159, r11161, MPFR_RNDN);
        mpfr_neg(r11171, r11154, MPFR_RNDN);
        mpfr_fma(r11172, r11169, r11170, r11171, MPFR_RNDN);
        if (mpfr_get_si(r11165, MPFR_RNDN)) { mpfr_set(r11173, r11168, MPFR_RNDN); } else { mpfr_set(r11173, r11172, MPFR_RNDN); };
        if (mpfr_get_si(r11152, MPFR_RNDN)) { mpfr_set(r11174, r11163, MPFR_RNDN); } else { mpfr_set(r11174, r11173, MPFR_RNDN); };
        return mpfr_get_d(r11174, MPFR_RNDN);
}

