#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 r6238898 = x;
        float r6238899 = eps;
        float r6238900 = r6238898 + r6238899;
        float r6238901 = tan(r6238900);
        float r6238902 = tan(r6238898);
        float r6238903 = r6238901 - r6238902;
        return r6238903;
}

double f_id(double x, double eps) {
        double r6238904 = x;
        double r6238905 = eps;
        double r6238906 = r6238904 + r6238905;
        double r6238907 = tan(r6238906);
        double r6238908 = tan(r6238904);
        double r6238909 = r6238907 - r6238908;
        return r6238909;
}


double f_of(float x, float eps) {
        float r6238910 = eps;
        float r6238911 = -2.3760355175626085e-40;
        bool r6238912 = r6238910 <= r6238911;
        float r6238913 = x;
        float r6238914 = tan(r6238913);
        float r6238915 = tan(r6238910);
        float r6238916 = r6238914 + r6238915;
        float r6238917 = 1;
        float r6238918 = r6238914 * r6238915;
        float r6238919 = r6238917 - r6238918;
        float r6238920 = r6238916 / r6238919;
        float r6238921 = sin(r6238913);
        float r6238922 = cos(r6238913);
        float r6238923 = r6238921 / r6238922;
        float r6238924 = r6238923 / r6238916;
        float r6238925 = r6238924 * r6238916;
        float r6238926 = r6238920 - r6238925;
        float r6238927 = 1.5059506191485345e-46;
        bool r6238928 = r6238910 <= r6238927;
        float r6238929 = r6238913 * r6238913;
        float r6238930 = r6238910 * r6238910;
        float r6238931 = r6238929 * r6238930;
        float r6238932 = r6238913 * r6238910;
        float r6238933 = r6238932 + r6238917;
        float r6238934 = r6238931 + r6238933;
        float r6238935 = r6238910 * r6238934;
        float r6238936 = r6238920 - r6238923;
        float r6238937 = r6238928 ? r6238935 : r6238936;
        float r6238938 = r6238912 ? r6238926 : r6238937;
        return r6238938;
}

double f_od(double x, double eps) {
        double r6238939 = eps;
        double r6238940 = -2.3760355175626085e-40;
        bool r6238941 = r6238939 <= r6238940;
        double r6238942 = x;
        double r6238943 = tan(r6238942);
        double r6238944 = tan(r6238939);
        double r6238945 = r6238943 + r6238944;
        double r6238946 = 1;
        double r6238947 = r6238943 * r6238944;
        double r6238948 = r6238946 - r6238947;
        double r6238949 = r6238945 / r6238948;
        double r6238950 = sin(r6238942);
        double r6238951 = cos(r6238942);
        double r6238952 = r6238950 / r6238951;
        double r6238953 = r6238952 / r6238945;
        double r6238954 = r6238953 * r6238945;
        double r6238955 = r6238949 - r6238954;
        double r6238956 = 1.5059506191485345e-46;
        bool r6238957 = r6238939 <= r6238956;
        double r6238958 = r6238942 * r6238942;
        double r6238959 = r6238939 * r6238939;
        double r6238960 = r6238958 * r6238959;
        double r6238961 = r6238942 * r6238939;
        double r6238962 = r6238961 + r6238946;
        double r6238963 = r6238960 + r6238962;
        double r6238964 = r6238939 * r6238963;
        double r6238965 = r6238949 - r6238952;
        double r6238966 = r6238957 ? r6238964 : r6238965;
        double r6238967 = r6238941 ? r6238955 : r6238966;
        return r6238967;
}

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 r6238968, r6238969, r6238970, r6238971, r6238972, r6238973;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6238968);
        mpfr_init(r6238969);
        mpfr_init(r6238970);
        mpfr_init(r6238971);
        mpfr_init(r6238972);
        mpfr_init(r6238973);
}

double f_im(double x, double eps) {
        mpfr_set_d(r6238968, x, MPFR_RNDN);
        mpfr_set_d(r6238969, eps, MPFR_RNDN);
        mpfr_add(r6238970, r6238968, r6238969, MPFR_RNDN);
        mpfr_tan(r6238971, r6238970, MPFR_RNDN);
        mpfr_tan(r6238972, r6238968, MPFR_RNDN);
        mpfr_sub(r6238973, r6238971, r6238972, MPFR_RNDN);
        return mpfr_get_d(r6238973, MPFR_RNDN);
}

static mpfr_t r6238974, r6238975, r6238976, r6238977, r6238978, r6238979, r6238980, r6238981, r6238982, r6238983, r6238984, r6238985, r6238986, r6238987, r6238988, r6238989, r6238990, r6238991, r6238992, r6238993, r6238994, r6238995, r6238996, r6238997, r6238998, r6238999, r6239000, r6239001, r6239002;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6238974);
        mpfr_init_set_str(r6238975, "-2.3760355175626085e-40", 10, MPFR_RNDN);
        mpfr_init(r6238976);
        mpfr_init(r6238977);
        mpfr_init(r6238978);
        mpfr_init(r6238979);
        mpfr_init(r6238980);
        mpfr_init_set_str(r6238981, "1", 10, MPFR_RNDN);
        mpfr_init(r6238982);
        mpfr_init(r6238983);
        mpfr_init(r6238984);
        mpfr_init(r6238985);
        mpfr_init(r6238986);
        mpfr_init(r6238987);
        mpfr_init(r6238988);
        mpfr_init(r6238989);
        mpfr_init(r6238990);
        mpfr_init_set_str(r6238991, "1.5059506191485345e-46", 10, MPFR_RNDN);
        mpfr_init(r6238992);
        mpfr_init(r6238993);
        mpfr_init(r6238994);
        mpfr_init(r6238995);
        mpfr_init(r6238996);
        mpfr_init(r6238997);
        mpfr_init(r6238998);
        mpfr_init(r6238999);
        mpfr_init(r6239000);
        mpfr_init(r6239001);
        mpfr_init(r6239002);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r6238974, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r6238976, mpfr_cmp(r6238974, r6238975) <= 0, MPFR_RNDN);
        mpfr_set_d(r6238977, x, MPFR_RNDN);
        mpfr_tan(r6238978, r6238977, MPFR_RNDN);
        mpfr_tan(r6238979, r6238974, MPFR_RNDN);
        mpfr_add(r6238980, r6238978, r6238979, MPFR_RNDN);
        ;
        mpfr_mul(r6238982, r6238978, r6238979, MPFR_RNDN);
        mpfr_sub(r6238983, r6238981, r6238982, MPFR_RNDN);
        mpfr_div(r6238984, r6238980, r6238983, MPFR_RNDN);
        mpfr_sin(r6238985, r6238977, MPFR_RNDN);
        mpfr_cos(r6238986, r6238977, MPFR_RNDN);
        mpfr_div(r6238987, r6238985, r6238986, MPFR_RNDN);
        mpfr_div(r6238988, r6238987, r6238980, MPFR_RNDN);
        mpfr_mul(r6238989, r6238988, r6238980, MPFR_RNDN);
        mpfr_sub(r6238990, r6238984, r6238989, MPFR_RNDN);
        ;
        mpfr_set_si(r6238992, mpfr_cmp(r6238974, r6238991) <= 0, MPFR_RNDN);
        mpfr_mul(r6238993, r6238977, r6238977, MPFR_RNDN);
        mpfr_mul(r6238994, r6238974, r6238974, MPFR_RNDN);
        mpfr_mul(r6238995, r6238993, r6238994, MPFR_RNDN);
        mpfr_mul(r6238996, r6238977, r6238974, MPFR_RNDN);
        mpfr_add(r6238997, r6238996, r6238981, MPFR_RNDN);
        mpfr_add(r6238998, r6238995, r6238997, MPFR_RNDN);
        mpfr_mul(r6238999, r6238974, r6238998, MPFR_RNDN);
        mpfr_sub(r6239000, r6238984, r6238987, MPFR_RNDN);
        if (mpfr_get_si(r6238992, MPFR_RNDN)) { mpfr_set(r6239001, r6238999, MPFR_RNDN); } else { mpfr_set(r6239001, r6239000, MPFR_RNDN); };
        if (mpfr_get_si(r6238976, MPFR_RNDN)) { mpfr_set(r6239002, r6238990, MPFR_RNDN); } else { mpfr_set(r6239002, r6239001, MPFR_RNDN); };
        return mpfr_get_d(r6239002, MPFR_RNDN);
}

static mpfr_t r6239003, r6239004, r6239005, r6239006, r6239007, r6239008, r6239009, r6239010, r6239011, r6239012, r6239013, r6239014, r6239015, r6239016, r6239017, r6239018, r6239019, r6239020, r6239021, r6239022, r6239023, r6239024, r6239025, r6239026, r6239027, r6239028, r6239029, r6239030, r6239031;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r6239003);
        mpfr_init_set_str(r6239004, "-2.3760355175626085e-40", 10, MPFR_RNDN);
        mpfr_init(r6239005);
        mpfr_init(r6239006);
        mpfr_init(r6239007);
        mpfr_init(r6239008);
        mpfr_init(r6239009);
        mpfr_init_set_str(r6239010, "1", 10, MPFR_RNDN);
        mpfr_init(r6239011);
        mpfr_init(r6239012);
        mpfr_init(r6239013);
        mpfr_init(r6239014);
        mpfr_init(r6239015);
        mpfr_init(r6239016);
        mpfr_init(r6239017);
        mpfr_init(r6239018);
        mpfr_init(r6239019);
        mpfr_init_set_str(r6239020, "1.5059506191485345e-46", 10, MPFR_RNDN);
        mpfr_init(r6239021);
        mpfr_init(r6239022);
        mpfr_init(r6239023);
        mpfr_init(r6239024);
        mpfr_init(r6239025);
        mpfr_init(r6239026);
        mpfr_init(r6239027);
        mpfr_init(r6239028);
        mpfr_init(r6239029);
        mpfr_init(r6239030);
        mpfr_init(r6239031);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r6239003, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r6239005, mpfr_cmp(r6239003, r6239004) <= 0, MPFR_RNDN);
        mpfr_set_d(r6239006, x, MPFR_RNDN);
        mpfr_tan(r6239007, r6239006, MPFR_RNDN);
        mpfr_tan(r6239008, r6239003, MPFR_RNDN);
        mpfr_add(r6239009, r6239007, r6239008, MPFR_RNDN);
        ;
        mpfr_mul(r6239011, r6239007, r6239008, MPFR_RNDN);
        mpfr_sub(r6239012, r6239010, r6239011, MPFR_RNDN);
        mpfr_div(r6239013, r6239009, r6239012, MPFR_RNDN);
        mpfr_sin(r6239014, r6239006, MPFR_RNDN);
        mpfr_cos(r6239015, r6239006, MPFR_RNDN);
        mpfr_div(r6239016, r6239014, r6239015, MPFR_RNDN);
        mpfr_div(r6239017, r6239016, r6239009, MPFR_RNDN);
        mpfr_mul(r6239018, r6239017, r6239009, MPFR_RNDN);
        mpfr_sub(r6239019, r6239013, r6239018, MPFR_RNDN);
        ;
        mpfr_set_si(r6239021, mpfr_cmp(r6239003, r6239020) <= 0, MPFR_RNDN);
        mpfr_mul(r6239022, r6239006, r6239006, MPFR_RNDN);
        mpfr_mul(r6239023, r6239003, r6239003, MPFR_RNDN);
        mpfr_mul(r6239024, r6239022, r6239023, MPFR_RNDN);
        mpfr_mul(r6239025, r6239006, r6239003, MPFR_RNDN);
        mpfr_add(r6239026, r6239025, r6239010, MPFR_RNDN);
        mpfr_add(r6239027, r6239024, r6239026, MPFR_RNDN);
        mpfr_mul(r6239028, r6239003, r6239027, MPFR_RNDN);
        mpfr_sub(r6239029, r6239013, r6239016, MPFR_RNDN);
        if (mpfr_get_si(r6239021, MPFR_RNDN)) { mpfr_set(r6239030, r6239028, MPFR_RNDN); } else { mpfr_set(r6239030, r6239029, MPFR_RNDN); };
        if (mpfr_get_si(r6239005, MPFR_RNDN)) { mpfr_set(r6239031, r6239019, MPFR_RNDN); } else { mpfr_set(r6239031, r6239030, MPFR_RNDN); };
        return mpfr_get_d(r6239031, MPFR_RNDN);
}

