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

char *name = "Trigonometry A";

double f_if(float e, float v) {
        float r8171 = e;
        float r8172 = v;
        float r8173 = sin(r8172);
        float r8174 = r8171 * r8173;
        float r8175 = 1;
        float r8176 = cos(r8172);
        float r8177 = r8171 * r8176;
        float r8178 = r8175 + r8177;
        float r8179 = r8174 / r8178;
        return r8179;
}

double f_id(double e, double v) {
        double r8180 = e;
        double r8181 = v;
        double r8182 = sin(r8181);
        double r8183 = r8180 * r8182;
        double r8184 = 1;
        double r8185 = cos(r8181);
        double r8186 = r8180 * r8185;
        double r8187 = r8184 + r8186;
        double r8188 = r8183 / r8187;
        return r8188;
}


double f_of(float e, float v) {
        float r8189 = e;
        float r8190 = v;
        float r8191 = sin(r8190);
        float r8192 = r8189 * r8191;
        float r8193 = 1;
        float r8194 = cos(r8190);
        float r8195 = r8189 * r8194;
        float r8196 = exp(r8195);
        float r8197 = log(r8196);
        float r8198 = r8193 + r8197;
        float r8199 = r8192 / r8198;
        return r8199;
}

double f_od(double e, double v) {
        double r8200 = e;
        double r8201 = v;
        double r8202 = sin(r8201);
        double r8203 = r8200 * r8202;
        double r8204 = 1;
        double r8205 = cos(r8201);
        double r8206 = r8200 * r8205;
        double r8207 = exp(r8206);
        double r8208 = log(r8207);
        double r8209 = r8204 + r8208;
        double r8210 = r8203 / r8209;
        return r8210;
}

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 r8211, r8212, r8213, r8214, r8215, r8216, r8217, r8218, r8219;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8211);
        mpfr_init(r8212);
        mpfr_init(r8213);
        mpfr_init(r8214);
        mpfr_init_set_str(r8215, "1", 10, MPFR_RNDN);
        mpfr_init(r8216);
        mpfr_init(r8217);
        mpfr_init(r8218);
        mpfr_init(r8219);
}

double f_im(double e, double v) {
        mpfr_set_d(r8211, e, MPFR_RNDN);
        mpfr_set_d(r8212, v, MPFR_RNDN);
        mpfr_sin(r8213, r8212, MPFR_RNDN);
        mpfr_mul(r8214, r8211, r8213, MPFR_RNDN);
        ;
        mpfr_cos(r8216, r8212, MPFR_RNDN);
        mpfr_mul(r8217, r8211, r8216, MPFR_RNDN);
        mpfr_add(r8218, r8215, r8217, MPFR_RNDN);
        mpfr_div(r8219, r8214, r8218, MPFR_RNDN);
        return mpfr_get_d(r8219, MPFR_RNDN);
}

static mpfr_t r8220, r8221, r8222, r8223, r8224, r8225, r8226, r8227, r8228, r8229, r8230;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8220);
        mpfr_init(r8221);
        mpfr_init(r8222);
        mpfr_init(r8223);
        mpfr_init_set_str(r8224, "1", 10, MPFR_RNDN);
        mpfr_init(r8225);
        mpfr_init(r8226);
        mpfr_init(r8227);
        mpfr_init(r8228);
        mpfr_init(r8229);
        mpfr_init(r8230);
}

double f_fm(double e, double v) {
        mpfr_set_d(r8220, e, MPFR_RNDN);
        mpfr_set_d(r8221, v, MPFR_RNDN);
        mpfr_sin(r8222, r8221, MPFR_RNDN);
        mpfr_mul(r8223, r8220, r8222, MPFR_RNDN);
        ;
        mpfr_cos(r8225, r8221, MPFR_RNDN);
        mpfr_mul(r8226, r8220, r8225, MPFR_RNDN);
        mpfr_exp(r8227, r8226, MPFR_RNDN);
        mpfr_log(r8228, r8227, MPFR_RNDN);
        mpfr_add(r8229, r8224, r8228, MPFR_RNDN);
        mpfr_div(r8230, r8223, r8229, MPFR_RNDN);
        return mpfr_get_d(r8230, MPFR_RNDN);
}

static mpfr_t r8231, r8232, r8233, r8234, r8235, r8236, r8237, r8238, r8239, r8240, r8241;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8231);
        mpfr_init(r8232);
        mpfr_init(r8233);
        mpfr_init(r8234);
        mpfr_init_set_str(r8235, "1", 10, MPFR_RNDN);
        mpfr_init(r8236);
        mpfr_init(r8237);
        mpfr_init(r8238);
        mpfr_init(r8239);
        mpfr_init(r8240);
        mpfr_init(r8241);
}

double f_dm(double e, double v) {
        mpfr_set_d(r8231, e, MPFR_RNDN);
        mpfr_set_d(r8232, v, MPFR_RNDN);
        mpfr_sin(r8233, r8232, MPFR_RNDN);
        mpfr_mul(r8234, r8231, r8233, MPFR_RNDN);
        ;
        mpfr_cos(r8236, r8232, MPFR_RNDN);
        mpfr_mul(r8237, r8231, r8236, MPFR_RNDN);
        mpfr_exp(r8238, r8237, MPFR_RNDN);
        mpfr_log(r8239, r8238, MPFR_RNDN);
        mpfr_add(r8240, r8235, r8239, MPFR_RNDN);
        mpfr_div(r8241, r8234, r8240, MPFR_RNDN);
        return mpfr_get_d(r8241, MPFR_RNDN);
}

