#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 r11005 = x;
        float r11006 = eps;
        float r11007 = r11005 + r11006;
        float r11008 = tan(r11007);
        float r11009 = tan(r11005);
        float r11010 = r11008 - r11009;
        return r11010;
}

double f_id(double x, double eps) {
        double r11011 = x;
        double r11012 = eps;
        double r11013 = r11011 + r11012;
        double r11014 = tan(r11013);
        double r11015 = tan(r11011);
        double r11016 = r11014 - r11015;
        return r11016;
}


double f_of(float x, float eps) {
        float r11017 = eps;
        float r11018 = sin(r11017);
        float r11019 = x;
        float r11020 = cos(r11019);
        float r11021 = r11018 / r11020;
        float r11022 = cos(r11017);
        float r11023 = r11020 / r11022;
        float r11024 = sin(r11019);
        float r11025 = r11024 / r11022;
        float r11026 = r11024 / r11020;
        float r11027 = r11025 * r11026;
        float r11028 = r11023 + r11027;
        float r11029 = 1;
        float r11030 = r11025 * r11021;
        float r11031 = r11029 - r11030;
        float r11032 = r11028 / r11031;
        float r11033 = r11021 * r11032;
        return r11033;
}

double f_od(double x, double eps) {
        double r11034 = eps;
        double r11035 = sin(r11034);
        double r11036 = x;
        double r11037 = cos(r11036);
        double r11038 = r11035 / r11037;
        double r11039 = cos(r11034);
        double r11040 = r11037 / r11039;
        double r11041 = sin(r11036);
        double r11042 = r11041 / r11039;
        double r11043 = r11041 / r11037;
        double r11044 = r11042 * r11043;
        double r11045 = r11040 + r11044;
        double r11046 = 1;
        double r11047 = r11042 * r11038;
        double r11048 = r11046 - r11047;
        double r11049 = r11045 / r11048;
        double r11050 = r11038 * r11049;
        return r11050;
}

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 r11051, r11052, r11053, r11054, r11055, r11056;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11051);
        mpfr_init(r11052);
        mpfr_init(r11053);
        mpfr_init(r11054);
        mpfr_init(r11055);
        mpfr_init(r11056);
}

double f_im(double x, double eps) {
        mpfr_set_d(r11051, x, MPFR_RNDN);
        mpfr_set_d(r11052, eps, MPFR_RNDN);
        mpfr_add(r11053, r11051, r11052, MPFR_RNDN);
        mpfr_tan(r11054, r11053, MPFR_RNDN);
        mpfr_tan(r11055, r11051, MPFR_RNDN);
        mpfr_sub(r11056, r11054, r11055, MPFR_RNDN);
        return mpfr_get_d(r11056, MPFR_RNDN);
}

static mpfr_t r11057, r11058, r11059, r11060, r11061, r11062, r11063, r11064, r11065, r11066, r11067, r11068, r11069, r11070, r11071, r11072, r11073;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11057);
        mpfr_init(r11058);
        mpfr_init(r11059);
        mpfr_init(r11060);
        mpfr_init(r11061);
        mpfr_init(r11062);
        mpfr_init(r11063);
        mpfr_init(r11064);
        mpfr_init(r11065);
        mpfr_init(r11066);
        mpfr_init(r11067);
        mpfr_init(r11068);
        mpfr_init_set_str(r11069, "1", 10, MPFR_RNDN);
        mpfr_init(r11070);
        mpfr_init(r11071);
        mpfr_init(r11072);
        mpfr_init(r11073);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r11057, eps, MPFR_RNDN);
        mpfr_sin(r11058, r11057, MPFR_RNDN);
        mpfr_set_d(r11059, x, MPFR_RNDN);
        mpfr_cos(r11060, r11059, MPFR_RNDN);
        mpfr_div(r11061, r11058, r11060, MPFR_RNDN);
        mpfr_cos(r11062, r11057, MPFR_RNDN);
        mpfr_div(r11063, r11060, r11062, MPFR_RNDN);
        mpfr_sin(r11064, r11059, MPFR_RNDN);
        mpfr_div(r11065, r11064, r11062, MPFR_RNDN);
        mpfr_div(r11066, r11064, r11060, MPFR_RNDN);
        mpfr_mul(r11067, r11065, r11066, MPFR_RNDN);
        mpfr_add(r11068, r11063, r11067, MPFR_RNDN);
        ;
        mpfr_mul(r11070, r11065, r11061, MPFR_RNDN);
        mpfr_sub(r11071, r11069, r11070, MPFR_RNDN);
        mpfr_div(r11072, r11068, r11071, MPFR_RNDN);
        mpfr_mul(r11073, r11061, r11072, MPFR_RNDN);
        return mpfr_get_d(r11073, MPFR_RNDN);
}

static mpfr_t r11074, r11075, r11076, r11077, r11078, r11079, r11080, r11081, r11082, r11083, r11084, r11085, r11086, r11087, r11088, r11089, r11090;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r11074);
        mpfr_init(r11075);
        mpfr_init(r11076);
        mpfr_init(r11077);
        mpfr_init(r11078);
        mpfr_init(r11079);
        mpfr_init(r11080);
        mpfr_init(r11081);
        mpfr_init(r11082);
        mpfr_init(r11083);
        mpfr_init(r11084);
        mpfr_init(r11085);
        mpfr_init_set_str(r11086, "1", 10, MPFR_RNDN);
        mpfr_init(r11087);
        mpfr_init(r11088);
        mpfr_init(r11089);
        mpfr_init(r11090);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r11074, eps, MPFR_RNDN);
        mpfr_sin(r11075, r11074, MPFR_RNDN);
        mpfr_set_d(r11076, x, MPFR_RNDN);
        mpfr_cos(r11077, r11076, MPFR_RNDN);
        mpfr_div(r11078, r11075, r11077, MPFR_RNDN);
        mpfr_cos(r11079, r11074, MPFR_RNDN);
        mpfr_div(r11080, r11077, r11079, MPFR_RNDN);
        mpfr_sin(r11081, r11076, MPFR_RNDN);
        mpfr_div(r11082, r11081, r11079, MPFR_RNDN);
        mpfr_div(r11083, r11081, r11077, MPFR_RNDN);
        mpfr_mul(r11084, r11082, r11083, MPFR_RNDN);
        mpfr_add(r11085, r11080, r11084, MPFR_RNDN);
        ;
        mpfr_mul(r11087, r11082, r11078, MPFR_RNDN);
        mpfr_sub(r11088, r11086, r11087, MPFR_RNDN);
        mpfr_div(r11089, r11085, r11088, MPFR_RNDN);
        mpfr_mul(r11090, r11078, r11089, MPFR_RNDN);
        return mpfr_get_d(r11090, MPFR_RNDN);
}

