#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Trigonometry B";

double f_if(float x) {
        float r3911170 = 1;
        float r3911171 = x;
        float r3911172 = tan(r3911171);
        float r3911173 = r3911172 * r3911172;
        float r3911174 = r3911170 - r3911173;
        float r3911175 = r3911170 + r3911173;
        float r3911176 = r3911174 / r3911175;
        return r3911176;
}

double f_id(double x) {
        double r3911177 = 1;
        double r3911178 = x;
        double r3911179 = tan(r3911178);
        double r3911180 = r3911179 * r3911179;
        double r3911181 = r3911177 - r3911180;
        double r3911182 = r3911177 + r3911180;
        double r3911183 = r3911181 / r3911182;
        return r3911183;
}


double f_of(float x) {
        float r3911184 = 1;
        float r3911185 = x;
        float r3911186 = tan(r3911185);
        float r3911187 = r3911186 * r3911186;
        float r3911188 = r3911184 - r3911187;
        float r3911189 = r3911184 + r3911187;
        float r3911190 = r3911184 / r3911189;
        float r3911191 = r3911188 * r3911190;
        return r3911191;
}

double f_od(double x) {
        double r3911192 = 1;
        double r3911193 = x;
        double r3911194 = tan(r3911193);
        double r3911195 = r3911194 * r3911194;
        double r3911196 = r3911192 - r3911195;
        double r3911197 = r3911192 + r3911195;
        double r3911198 = r3911192 / r3911197;
        double r3911199 = r3911196 * r3911198;
        return r3911199;
}

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 r3911200, r3911201, r3911202, r3911203, r3911204, r3911205, r3911206;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r3911200, "1", 10, MPFR_RNDN);
        mpfr_init(r3911201);
        mpfr_init(r3911202);
        mpfr_init(r3911203);
        mpfr_init(r3911204);
        mpfr_init(r3911205);
        mpfr_init(r3911206);
}

double f_im(double x) {
        ;
        mpfr_set_d(r3911201, x, MPFR_RNDN);
        mpfr_tan(r3911202, r3911201, MPFR_RNDN);
        mpfr_mul(r3911203, r3911202, r3911202, MPFR_RNDN);
        mpfr_sub(r3911204, r3911200, r3911203, MPFR_RNDN);
        mpfr_add(r3911205, r3911200, r3911203, MPFR_RNDN);
        mpfr_div(r3911206, r3911204, r3911205, MPFR_RNDN);
        return mpfr_get_d(r3911206, MPFR_RNDN);
}

static mpfr_t r3911207, r3911208, r3911209, r3911210, r3911211, r3911212, r3911213, r3911214;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r3911207, "1", 10, MPFR_RNDN);
        mpfr_init(r3911208);
        mpfr_init(r3911209);
        mpfr_init(r3911210);
        mpfr_init(r3911211);
        mpfr_init(r3911212);
        mpfr_init(r3911213);
        mpfr_init(r3911214);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r3911208, x, MPFR_RNDN);
        mpfr_tan(r3911209, r3911208, MPFR_RNDN);
        mpfr_mul(r3911210, r3911209, r3911209, MPFR_RNDN);
        mpfr_sub(r3911211, r3911207, r3911210, MPFR_RNDN);
        mpfr_add(r3911212, r3911207, r3911210, MPFR_RNDN);
        mpfr_div(r3911213, r3911207, r3911212, MPFR_RNDN);
        mpfr_mul(r3911214, r3911211, r3911213, MPFR_RNDN);
        return mpfr_get_d(r3911214, MPFR_RNDN);
}

static mpfr_t r3911215, r3911216, r3911217, r3911218, r3911219, r3911220, r3911221, r3911222;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r3911215, "1", 10, MPFR_RNDN);
        mpfr_init(r3911216);
        mpfr_init(r3911217);
        mpfr_init(r3911218);
        mpfr_init(r3911219);
        mpfr_init(r3911220);
        mpfr_init(r3911221);
        mpfr_init(r3911222);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r3911216, x, MPFR_RNDN);
        mpfr_tan(r3911217, r3911216, MPFR_RNDN);
        mpfr_mul(r3911218, r3911217, r3911217, MPFR_RNDN);
        mpfr_sub(r3911219, r3911215, r3911218, MPFR_RNDN);
        mpfr_add(r3911220, r3911215, r3911218, MPFR_RNDN);
        mpfr_div(r3911221, r3911215, r3911220, MPFR_RNDN);
        mpfr_mul(r3911222, r3911219, r3911221, MPFR_RNDN);
        return mpfr_get_d(r3911222, MPFR_RNDN);
}

