#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 r17672 = x;
        float r17673 = sin(r17672);
        float r17674 = r17672 - r17673;
        float r17675 = tan(r17672);
        float r17676 = r17672 - r17675;
        float r17677 = r17674 / r17676;
        return r17677;
}

double f_id(double x) {
        double r17678 = x;
        double r17679 = sin(r17678);
        double r17680 = r17678 - r17679;
        double r17681 = tan(r17678);
        double r17682 = r17678 - r17681;
        double r17683 = r17680 / r17682;
        return r17683;
}


double f_of(float x) {
        float r17684 = x;
        float r17685 = -9.950485992669078e-09f;
        bool r17686 = r17684 <= r17685;
        float r17687 = tan(r17684);
        float r17688 = r17684 - r17687;
        float r17689 = r17684 / r17688;
        float r17690 = sin(r17684);
        float r17691 = r17690 / r17688;
        float r17692 = r17689 - r17691;
        float r17693 = 0.16631490308113306f;
        bool r17694 = r17684 <= r17693;
        float r17695 = 0.225f;
        float r17696 = r17684 * r17684;
        float r17697 = r17695 * r17696;
        float r17698 = 0.009642857142857142f;
        float r17699 = 4.0f;
        float r17700 = pow(r17684, r17699);
        float r17701 = r17698 * r17700;
        float r17702 = 0.5f;
        float r17703 = r17701 + r17702;
        float r17704 = r17697 - r17703;
        float r17705 = r17684 - r17690;
        float r17706 = r17705 / r17688;
        float r17707 = r17694 ? r17704 : r17706;
        float r17708 = r17686 ? r17692 : r17707;
        return r17708;
}

double f_od(double x) {
        double r17709 = x;
        double r17710 = -9.950485992669078e-09;
        bool r17711 = r17709 <= r17710;
        double r17712 = tan(r17709);
        double r17713 = r17709 - r17712;
        double r17714 = r17709 / r17713;
        double r17715 = sin(r17709);
        double r17716 = r17715 / r17713;
        double r17717 = r17714 - r17716;
        double r17718 = 0.16631490308113306;
        bool r17719 = r17709 <= r17718;
        double r17720 = 0.225;
        double r17721 = r17709 * r17709;
        double r17722 = r17720 * r17721;
        double r17723 = 0.009642857142857142;
        double r17724 = 4.0;
        double r17725 = pow(r17709, r17724);
        double r17726 = r17723 * r17725;
        double r17727 = 0.5;
        double r17728 = r17726 + r17727;
        double r17729 = r17722 - r17728;
        double r17730 = r17709 - r17715;
        double r17731 = r17730 / r17713;
        double r17732 = r17719 ? r17729 : r17731;
        double r17733 = r17711 ? r17717 : r17732;
        return r17733;
}

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 r17734, r17735, r17736, r17737, r17738, r17739;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r17734);
        mpfr_init(r17735);
        mpfr_init(r17736);
        mpfr_init(r17737);
        mpfr_init(r17738);
        mpfr_init(r17739);
}

double f_im(double x) {
        mpfr_set_d(r17734, x, MPFR_RNDN);
        mpfr_sin(r17735, r17734, MPFR_RNDN);
        mpfr_sub(r17736, r17734, r17735, MPFR_RNDN);
        mpfr_tan(r17737, r17734, MPFR_RNDN);
        mpfr_sub(r17738, r17734, r17737, MPFR_RNDN);
        mpfr_div(r17739, r17736, r17738, MPFR_RNDN);
        return mpfr_get_d(r17739, MPFR_RNDN);
}

static mpfr_t r17740, r17741, r17742, r17743, r17744, r17745, r17746, r17747, r17748, r17749, r17750, r17751, r17752, r17753, r17754, r17755, r17756, r17757, r17758, r17759, r17760, r17761, r17762, r17763, r17764;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r17740);
        mpfr_init_set_str(r17741, "-9.950485992669078e-09", 10, MPFR_RNDN);
        mpfr_init(r17742);
        mpfr_init(r17743);
        mpfr_init(r17744);
        mpfr_init(r17745);
        mpfr_init(r17746);
        mpfr_init(r17747);
        mpfr_init(r17748);
        mpfr_init_set_str(r17749, "0.16631490308113306", 10, MPFR_RNDN);
        mpfr_init(r17750);
        mpfr_init_set_str(r17751, "9/40", 10, MPFR_RNDN);
        mpfr_init(r17752);
        mpfr_init(r17753);
        mpfr_init_set_str(r17754, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r17755, "4", 10, MPFR_RNDN);
        mpfr_init(r17756);
        mpfr_init(r17757);
        mpfr_init_set_str(r17758, "1/2", 10, MPFR_RNDN);
        mpfr_init(r17759);
        mpfr_init(r17760);
        mpfr_init(r17761);
        mpfr_init(r17762);
        mpfr_init(r17763);
        mpfr_init(r17764);
}

double f_fm(double x) {
        mpfr_set_d(r17740, x, MPFR_RNDN);
        ;
        mpfr_set_si(r17742, mpfr_cmp(r17740, r17741) <= 0, MPFR_RNDN);
        mpfr_tan(r17743, r17740, MPFR_RNDN);
        mpfr_sub(r17744, r17740, r17743, MPFR_RNDN);
        mpfr_div(r17745, r17740, r17744, MPFR_RNDN);
        mpfr_sin(r17746, r17740, MPFR_RNDN);
        mpfr_div(r17747, r17746, r17744, MPFR_RNDN);
        mpfr_sub(r17748, r17745, r17747, MPFR_RNDN);
        ;
        mpfr_set_si(r17750, mpfr_cmp(r17740, r17749) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r17752, r17740, MPFR_RNDN);
        mpfr_mul(r17753, r17751, r17752, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r17756, r17740, r17755, MPFR_RNDN);
        mpfr_mul(r17757, r17754, r17756, MPFR_RNDN);
        ;
        mpfr_add(r17759, r17757, r17758, MPFR_RNDN);
        mpfr_sub(r17760, r17753, r17759, MPFR_RNDN);
        mpfr_sub(r17761, r17740, r17746, MPFR_RNDN);
        mpfr_div(r17762, r17761, r17744, MPFR_RNDN);
        if (mpfr_get_si(r17750, MPFR_RNDN)) { mpfr_set(r17763, r17760, MPFR_RNDN); } else { mpfr_set(r17763, r17762, MPFR_RNDN); };
        if (mpfr_get_si(r17742, MPFR_RNDN)) { mpfr_set(r17764, r17748, MPFR_RNDN); } else { mpfr_set(r17764, r17763, MPFR_RNDN); };
        return mpfr_get_d(r17764, MPFR_RNDN);
}

static mpfr_t r17765, r17766, r17767, r17768, r17769, r17770, r17771, r17772, r17773, r17774, r17775, r17776, r17777, r17778, r17779, r17780, r17781, r17782, r17783, r17784, r17785, r17786, r17787, r17788, r17789;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r17765);
        mpfr_init_set_str(r17766, "-9.950485992669078e-09", 10, MPFR_RNDN);
        mpfr_init(r17767);
        mpfr_init(r17768);
        mpfr_init(r17769);
        mpfr_init(r17770);
        mpfr_init(r17771);
        mpfr_init(r17772);
        mpfr_init(r17773);
        mpfr_init_set_str(r17774, "0.16631490308113306", 10, MPFR_RNDN);
        mpfr_init(r17775);
        mpfr_init_set_str(r17776, "9/40", 10, MPFR_RNDN);
        mpfr_init(r17777);
        mpfr_init(r17778);
        mpfr_init_set_str(r17779, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r17780, "4", 10, MPFR_RNDN);
        mpfr_init(r17781);
        mpfr_init(r17782);
        mpfr_init_set_str(r17783, "1/2", 10, MPFR_RNDN);
        mpfr_init(r17784);
        mpfr_init(r17785);
        mpfr_init(r17786);
        mpfr_init(r17787);
        mpfr_init(r17788);
        mpfr_init(r17789);
}

double f_dm(double x) {
        mpfr_set_d(r17765, x, MPFR_RNDN);
        ;
        mpfr_set_si(r17767, mpfr_cmp(r17765, r17766) <= 0, MPFR_RNDN);
        mpfr_tan(r17768, r17765, MPFR_RNDN);
        mpfr_sub(r17769, r17765, r17768, MPFR_RNDN);
        mpfr_div(r17770, r17765, r17769, MPFR_RNDN);
        mpfr_sin(r17771, r17765, MPFR_RNDN);
        mpfr_div(r17772, r17771, r17769, MPFR_RNDN);
        mpfr_sub(r17773, r17770, r17772, MPFR_RNDN);
        ;
        mpfr_set_si(r17775, mpfr_cmp(r17765, r17774) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r17777, r17765, MPFR_RNDN);
        mpfr_mul(r17778, r17776, r17777, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r17781, r17765, r17780, MPFR_RNDN);
        mpfr_mul(r17782, r17779, r17781, MPFR_RNDN);
        ;
        mpfr_add(r17784, r17782, r17783, MPFR_RNDN);
        mpfr_sub(r17785, r17778, r17784, MPFR_RNDN);
        mpfr_sub(r17786, r17765, r17771, MPFR_RNDN);
        mpfr_div(r17787, r17786, r17769, MPFR_RNDN);
        if (mpfr_get_si(r17775, MPFR_RNDN)) { mpfr_set(r17788, r17785, MPFR_RNDN); } else { mpfr_set(r17788, r17787, MPFR_RNDN); };
        if (mpfr_get_si(r17767, MPFR_RNDN)) { mpfr_set(r17789, r17773, MPFR_RNDN); } else { mpfr_set(r17789, r17788, MPFR_RNDN); };
        return mpfr_get_d(r17789, MPFR_RNDN);
}

