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

char *name = "sintan (problem 3.4.5)";

double f_if(float x) {
        float r18593 = x;
        float r18594 = sin(r18593);
        float r18595 = r18593 - r18594;
        float r18596 = tan(r18593);
        float r18597 = r18593 - r18596;
        float r18598 = r18595 / r18597;
        return r18598;
}

double f_id(double x) {
        double r18599 = x;
        double r18600 = sin(r18599);
        double r18601 = r18599 - r18600;
        double r18602 = tan(r18599);
        double r18603 = r18599 - r18602;
        double r18604 = r18601 / r18603;
        return r18604;
}


double f_of(float x) {
        float r18605 = x;
        float r18606 = -5.5164922447739564e-14f;
        bool r18607 = r18605 <= r18606;
        float r18608 = sin(r18605);
        float r18609 = r18605 - r18608;
        float r18610 = cbrt(r18609);
        float r18611 = tan(r18605);
        float r18612 = r18605 - r18611;
        float r18613 = cbrt(r18612);
        float r18614 = r18610 / r18613;
        float r18615 = r18614 * (r18614 * r18614);
        float r18616 = 0.22138222595296528f;
        bool r18617 = r18605 <= r18616;
        float r18618 = 0.225f;
        float r18619 = r18605 * r18605;
        float r18620 = r18618 * r18619;
        float r18621 = 0.009642857142857142f;
        float r18622 = 4.0f;
        float r18623 = pow(r18605, r18622);
        float r18624 = r18621 * r18623;
        float r18625 = 0.5f;
        float r18626 = r18624 + r18625;
        float r18627 = r18620 - r18626;
        float r18628 = r18617 ? r18627 : r18615;
        float r18629 = r18607 ? r18615 : r18628;
        return r18629;
}

double f_od(double x) {
        double r18630 = x;
        double r18631 = -5.5164922447739564e-14;
        bool r18632 = r18630 <= r18631;
        double r18633 = sin(r18630);
        double r18634 = r18630 - r18633;
        double r18635 = cbrt(r18634);
        double r18636 = tan(r18630);
        double r18637 = r18630 - r18636;
        double r18638 = cbrt(r18637);
        double r18639 = r18635 / r18638;
        double r18640 = r18639 * (r18639 * r18639);
        double r18641 = 0.22138222595296528;
        bool r18642 = r18630 <= r18641;
        double r18643 = 0.225;
        double r18644 = r18630 * r18630;
        double r18645 = r18643 * r18644;
        double r18646 = 0.009642857142857142;
        double r18647 = 4.0;
        double r18648 = pow(r18630, r18647);
        double r18649 = r18646 * r18648;
        double r18650 = 0.5;
        double r18651 = r18649 + r18650;
        double r18652 = r18645 - r18651;
        double r18653 = r18642 ? r18652 : r18640;
        double r18654 = r18632 ? r18640 : r18653;
        return r18654;
}

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 r18655, r18656, r18657, r18658, r18659, r18660;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r18655);
        mpfr_init(r18656);
        mpfr_init(r18657);
        mpfr_init(r18658);
        mpfr_init(r18659);
        mpfr_init(r18660);
}

double f_im(double x) {
        mpfr_set_d(r18655, x, MPFR_RNDN);
        mpfr_sin(r18656, r18655, MPFR_RNDN);
        mpfr_sub(r18657, r18655, r18656, MPFR_RNDN);
        mpfr_tan(r18658, r18655, MPFR_RNDN);
        mpfr_sub(r18659, r18655, r18658, MPFR_RNDN);
        mpfr_div(r18660, r18657, r18659, MPFR_RNDN);
        return mpfr_get_d(r18660, MPFR_RNDN);
}

static mpfr_t r18661, r18662, r18663, r18664, r18665, r18666, r18667, r18668, r18669, r18670, r18671, r18672, r18673, r18674, r18675, r18676, r18677, r18678, r18679, r18680, r18681, r18682, r18683, r18684, r18685;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r18661);
        mpfr_init_set_str(r18662, "-5.5164922447739564e-14", 10, MPFR_RNDN);
        mpfr_init(r18663);
        mpfr_init(r18664);
        mpfr_init(r18665);
        mpfr_init(r18666);
        mpfr_init(r18667);
        mpfr_init(r18668);
        mpfr_init(r18669);
        mpfr_init(r18670);
        mpfr_init(r18671);
        mpfr_init_set_str(r18672, "0.22138222595296528", 10, MPFR_RNDN);
        mpfr_init(r18673);
        mpfr_init_set_str(r18674, "9/40", 10, MPFR_RNDN);
        mpfr_init(r18675);
        mpfr_init(r18676);
        mpfr_init_set_str(r18677, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r18678, "4", 10, MPFR_RNDN);
        mpfr_init(r18679);
        mpfr_init(r18680);
        mpfr_init_set_str(r18681, "1/2", 10, MPFR_RNDN);
        mpfr_init(r18682);
        mpfr_init(r18683);
        mpfr_init(r18684);
        mpfr_init(r18685);
}

double f_fm(double x) {
        mpfr_set_d(r18661, x, MPFR_RNDN);
        ;
        mpfr_set_si(r18663, mpfr_cmp(r18661, r18662) <= 0, MPFR_RNDN);
        mpfr_sin(r18664, r18661, MPFR_RNDN);
        mpfr_sub(r18665, r18661, r18664, MPFR_RNDN);
        mpfr_cbrt(r18666, r18665, MPFR_RNDN);
        mpfr_tan(r18667, r18661, MPFR_RNDN);
        mpfr_sub(r18668, r18661, r18667, MPFR_RNDN);
        mpfr_cbrt(r18669, r18668, MPFR_RNDN);
        mpfr_div(r18670, r18666, r18669, MPFR_RNDN);
        mpfr_mul(r18671, r18670, r18670, MPFR_RNDN); mpfr_mul(r18671, r18671, r18670, MPFR_RNDN);
        ;
        mpfr_set_si(r18673, mpfr_cmp(r18661, r18672) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r18675, r18661, MPFR_RNDN);
        mpfr_mul(r18676, r18674, r18675, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18679, r18661, r18678, MPFR_RNDN);
        mpfr_mul(r18680, r18677, r18679, MPFR_RNDN);
        ;
        mpfr_add(r18682, r18680, r18681, MPFR_RNDN);
        mpfr_sub(r18683, r18676, r18682, MPFR_RNDN);
        if (mpfr_get_si(r18673, MPFR_RNDN)) { mpfr_set(r18684, r18683, MPFR_RNDN); } else { mpfr_set(r18684, r18671, MPFR_RNDN); };
        if (mpfr_get_si(r18663, MPFR_RNDN)) { mpfr_set(r18685, r18671, MPFR_RNDN); } else { mpfr_set(r18685, r18684, MPFR_RNDN); };
        return mpfr_get_d(r18685, MPFR_RNDN);
}

static mpfr_t r18686, r18687, r18688, r18689, r18690, r18691, r18692, r18693, r18694, r18695, r18696, r18697, r18698, r18699, r18700, r18701, r18702, r18703, r18704, r18705, r18706, r18707, r18708, r18709, r18710;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r18686);
        mpfr_init_set_str(r18687, "-5.5164922447739564e-14", 10, MPFR_RNDN);
        mpfr_init(r18688);
        mpfr_init(r18689);
        mpfr_init(r18690);
        mpfr_init(r18691);
        mpfr_init(r18692);
        mpfr_init(r18693);
        mpfr_init(r18694);
        mpfr_init(r18695);
        mpfr_init(r18696);
        mpfr_init_set_str(r18697, "0.22138222595296528", 10, MPFR_RNDN);
        mpfr_init(r18698);
        mpfr_init_set_str(r18699, "9/40", 10, MPFR_RNDN);
        mpfr_init(r18700);
        mpfr_init(r18701);
        mpfr_init_set_str(r18702, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r18703, "4", 10, MPFR_RNDN);
        mpfr_init(r18704);
        mpfr_init(r18705);
        mpfr_init_set_str(r18706, "1/2", 10, MPFR_RNDN);
        mpfr_init(r18707);
        mpfr_init(r18708);
        mpfr_init(r18709);
        mpfr_init(r18710);
}

double f_dm(double x) {
        mpfr_set_d(r18686, x, MPFR_RNDN);
        ;
        mpfr_set_si(r18688, mpfr_cmp(r18686, r18687) <= 0, MPFR_RNDN);
        mpfr_sin(r18689, r18686, MPFR_RNDN);
        mpfr_sub(r18690, r18686, r18689, MPFR_RNDN);
        mpfr_cbrt(r18691, r18690, MPFR_RNDN);
        mpfr_tan(r18692, r18686, MPFR_RNDN);
        mpfr_sub(r18693, r18686, r18692, MPFR_RNDN);
        mpfr_cbrt(r18694, r18693, MPFR_RNDN);
        mpfr_div(r18695, r18691, r18694, MPFR_RNDN);
        mpfr_mul(r18696, r18695, r18695, MPFR_RNDN); mpfr_mul(r18696, r18696, r18695, MPFR_RNDN);
        ;
        mpfr_set_si(r18698, mpfr_cmp(r18686, r18697) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r18700, r18686, MPFR_RNDN);
        mpfr_mul(r18701, r18699, r18700, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r18704, r18686, r18703, MPFR_RNDN);
        mpfr_mul(r18705, r18702, r18704, MPFR_RNDN);
        ;
        mpfr_add(r18707, r18705, r18706, MPFR_RNDN);
        mpfr_sub(r18708, r18701, r18707, MPFR_RNDN);
        if (mpfr_get_si(r18698, MPFR_RNDN)) { mpfr_set(r18709, r18708, MPFR_RNDN); } else { mpfr_set(r18709, r18696, MPFR_RNDN); };
        if (mpfr_get_si(r18688, MPFR_RNDN)) { mpfr_set(r18710, r18696, MPFR_RNDN); } else { mpfr_set(r18710, r18709, MPFR_RNDN); };
        return mpfr_get_d(r18710, MPFR_RNDN);
}

