#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 r2277587 = e;
        float r2277588 = v;
        float r2277589 = sin(r2277588);
        float r2277590 = r2277587 * r2277589;
        float r2277591 = 1;
        float r2277592 = cos(r2277588);
        float r2277593 = r2277587 * r2277592;
        float r2277594 = r2277591 + r2277593;
        float r2277595 = r2277590 / r2277594;
        return r2277595;
}

double f_id(double e, double v) {
        double r2277596 = e;
        double r2277597 = v;
        double r2277598 = sin(r2277597);
        double r2277599 = r2277596 * r2277598;
        double r2277600 = 1;
        double r2277601 = cos(r2277597);
        double r2277602 = r2277596 * r2277601;
        double r2277603 = r2277600 + r2277602;
        double r2277604 = r2277599 / r2277603;
        return r2277604;
}


double f_of(float e, float v) {
        float r2277605 = e;
        float r2277606 = 1;
        float r2277607 = v;
        float r2277608 = cos(r2277607);
        float r2277609 = r2277605 * r2277608;
        float r2277610 = r2277606 + r2277609;
        float r2277611 = cbrt(r2277610);
        float r2277612 = r2277611 * r2277611;
        float r2277613 = r2277605 / r2277612;
        float r2277614 = sqrt(r2277613);
        float r2277615 = sin(r2277607);
        float r2277616 = r2277615 / r2277611;
        float r2277617 = r2277614 * r2277616;
        float r2277618 = r2277614 * r2277617;
        return r2277618;
}

double f_od(double e, double v) {
        double r2277619 = e;
        double r2277620 = 1;
        double r2277621 = v;
        double r2277622 = cos(r2277621);
        double r2277623 = r2277619 * r2277622;
        double r2277624 = r2277620 + r2277623;
        double r2277625 = cbrt(r2277624);
        double r2277626 = r2277625 * r2277625;
        double r2277627 = r2277619 / r2277626;
        double r2277628 = sqrt(r2277627);
        double r2277629 = sin(r2277621);
        double r2277630 = r2277629 / r2277625;
        double r2277631 = r2277628 * r2277630;
        double r2277632 = r2277628 * r2277631;
        return r2277632;
}

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 r2277633, r2277634, r2277635, r2277636, r2277637, r2277638, r2277639, r2277640, r2277641;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r2277633);
        mpfr_init(r2277634);
        mpfr_init(r2277635);
        mpfr_init(r2277636);
        mpfr_init_set_str(r2277637, "1", 10, MPFR_RNDN);
        mpfr_init(r2277638);
        mpfr_init(r2277639);
        mpfr_init(r2277640);
        mpfr_init(r2277641);
}

double f_im(double e, double v) {
        mpfr_set_d(r2277633, e, MPFR_RNDN);
        mpfr_set_d(r2277634, v, MPFR_RNDN);
        mpfr_sin(r2277635, r2277634, MPFR_RNDN);
        mpfr_mul(r2277636, r2277633, r2277635, MPFR_RNDN);
        ;
        mpfr_cos(r2277638, r2277634, MPFR_RNDN);
        mpfr_mul(r2277639, r2277633, r2277638, MPFR_RNDN);
        mpfr_add(r2277640, r2277637, r2277639, MPFR_RNDN);
        mpfr_div(r2277641, r2277636, r2277640, MPFR_RNDN);
        return mpfr_get_d(r2277641, MPFR_RNDN);
}

static mpfr_t r2277642, r2277643, r2277644, r2277645, r2277646, r2277647, r2277648, r2277649, r2277650, r2277651, r2277652, r2277653, r2277654, r2277655;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r2277642);
        mpfr_init_set_str(r2277643, "1", 10, MPFR_RNDN);
        mpfr_init(r2277644);
        mpfr_init(r2277645);
        mpfr_init(r2277646);
        mpfr_init(r2277647);
        mpfr_init(r2277648);
        mpfr_init(r2277649);
        mpfr_init(r2277650);
        mpfr_init(r2277651);
        mpfr_init(r2277652);
        mpfr_init(r2277653);
        mpfr_init(r2277654);
        mpfr_init(r2277655);
}

double f_fm(double e, double v) {
        mpfr_set_d(r2277642, e, MPFR_RNDN);
        ;
        mpfr_set_d(r2277644, v, MPFR_RNDN);
        mpfr_cos(r2277645, r2277644, MPFR_RNDN);
        mpfr_mul(r2277646, r2277642, r2277645, MPFR_RNDN);
        mpfr_add(r2277647, r2277643, r2277646, MPFR_RNDN);
        mpfr_cbrt(r2277648, r2277647, MPFR_RNDN);
        mpfr_mul(r2277649, r2277648, r2277648, MPFR_RNDN);
        mpfr_div(r2277650, r2277642, r2277649, MPFR_RNDN);
        mpfr_sqrt(r2277651, r2277650, MPFR_RNDN);
        mpfr_sin(r2277652, r2277644, MPFR_RNDN);
        mpfr_div(r2277653, r2277652, r2277648, MPFR_RNDN);
        mpfr_mul(r2277654, r2277651, r2277653, MPFR_RNDN);
        mpfr_mul(r2277655, r2277651, r2277654, MPFR_RNDN);
        return mpfr_get_d(r2277655, MPFR_RNDN);
}

static mpfr_t r2277656, r2277657, r2277658, r2277659, r2277660, r2277661, r2277662, r2277663, r2277664, r2277665, r2277666, r2277667, r2277668, r2277669;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r2277656);
        mpfr_init_set_str(r2277657, "1", 10, MPFR_RNDN);
        mpfr_init(r2277658);
        mpfr_init(r2277659);
        mpfr_init(r2277660);
        mpfr_init(r2277661);
        mpfr_init(r2277662);
        mpfr_init(r2277663);
        mpfr_init(r2277664);
        mpfr_init(r2277665);
        mpfr_init(r2277666);
        mpfr_init(r2277667);
        mpfr_init(r2277668);
        mpfr_init(r2277669);
}

double f_dm(double e, double v) {
        mpfr_set_d(r2277656, e, MPFR_RNDN);
        ;
        mpfr_set_d(r2277658, v, MPFR_RNDN);
        mpfr_cos(r2277659, r2277658, MPFR_RNDN);
        mpfr_mul(r2277660, r2277656, r2277659, MPFR_RNDN);
        mpfr_add(r2277661, r2277657, r2277660, MPFR_RNDN);
        mpfr_cbrt(r2277662, r2277661, MPFR_RNDN);
        mpfr_mul(r2277663, r2277662, r2277662, MPFR_RNDN);
        mpfr_div(r2277664, r2277656, r2277663, MPFR_RNDN);
        mpfr_sqrt(r2277665, r2277664, MPFR_RNDN);
        mpfr_sin(r2277666, r2277658, MPFR_RNDN);
        mpfr_div(r2277667, r2277666, r2277662, MPFR_RNDN);
        mpfr_mul(r2277668, r2277665, r2277667, MPFR_RNDN);
        mpfr_mul(r2277669, r2277665, r2277668, MPFR_RNDN);
        return mpfr_get_d(r2277669, MPFR_RNDN);
}

