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

char *name = "2sin (example 3.3)";

double f_if(float x, float eps) {
        float r10690 = x;
        float r10691 = eps;
        float r10692 = r10690 + r10691;
        float r10693 = sin(r10692);
        float r10694 = sin(r10690);
        float r10695 = r10693 - r10694;
        return r10695;
}

double f_id(double x, double eps) {
        double r10696 = x;
        double r10697 = eps;
        double r10698 = r10696 + r10697;
        double r10699 = sin(r10698);
        double r10700 = sin(r10696);
        double r10701 = r10699 - r10700;
        return r10701;
}


double f_of(float x, float eps) {
        float r10702 = x;
        float r10703 = cos(r10702);
        float r10704 = eps;
        float r10705 = sin(r10704);
        float r10706 = r10703 * r10705;
        float r10707 = sin(r10702);
        float r10708 = r10706 - r10707;
        float r10709 = cos(r10704);
        float r10710 = r10709 * r10707;
        float r10711 = r10708 + r10710;
        float r10712 = -0.00015965096829055196f;
        bool r10713 = r10711 <= r10712;
        float r10714 = 2.9988327787361897e-07f;
        bool r10715 = r10711 <= r10714;
        float r10716 = 2.0f;
        float r10717 = r10704 / r10716;
        float r10718 = sin(r10717);
        float r10719 = r10702 + r10702;
        float r10720 = r10704 + r10719;
        float r10721 = r10720 / r10716;
        float r10722 = cos(r10721);
        float r10723 = log1p(r10722);
        float r10724 = expm1(r10723);
        float r10725 = r10718 * r10724;
        float r10726 = r10716 * r10725;
        float r10727 = r10706 + r10710;
        float r10728 = r10727 - r10707;
        float r10729 = r10715 ? r10726 : r10728;
        float r10730 = r10713 ? r10711 : r10729;
        return r10730;
}

double f_od(double x, double eps) {
        double r10731 = x;
        double r10732 = cos(r10731);
        double r10733 = eps;
        double r10734 = sin(r10733);
        double r10735 = r10732 * r10734;
        double r10736 = sin(r10731);
        double r10737 = r10735 - r10736;
        double r10738 = cos(r10733);
        double r10739 = r10738 * r10736;
        double r10740 = r10737 + r10739;
        double r10741 = -0.00015965096829055196;
        bool r10742 = r10740 <= r10741;
        double r10743 = 2.9988327787361897e-07;
        bool r10744 = r10740 <= r10743;
        double r10745 = 2.0;
        double r10746 = r10733 / r10745;
        double r10747 = sin(r10746);
        double r10748 = r10731 + r10731;
        double r10749 = r10733 + r10748;
        double r10750 = r10749 / r10745;
        double r10751 = cos(r10750);
        double r10752 = log1p(r10751);
        double r10753 = expm1(r10752);
        double r10754 = r10747 * r10753;
        double r10755 = r10745 * r10754;
        double r10756 = r10735 + r10739;
        double r10757 = r10756 - r10736;
        double r10758 = r10744 ? r10755 : r10757;
        double r10759 = r10742 ? r10740 : r10758;
        return r10759;
}

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 r10760, r10761, r10762, r10763, r10764, r10765;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10760);
        mpfr_init(r10761);
        mpfr_init(r10762);
        mpfr_init(r10763);
        mpfr_init(r10764);
        mpfr_init(r10765);
}

double f_im(double x, double eps) {
        mpfr_set_d(r10760, x, MPFR_RNDN);
        mpfr_set_d(r10761, eps, MPFR_RNDN);
        mpfr_add(r10762, r10760, r10761, MPFR_RNDN);
        mpfr_sin(r10763, r10762, MPFR_RNDN);
        mpfr_sin(r10764, r10760, MPFR_RNDN);
        mpfr_sub(r10765, r10763, r10764, MPFR_RNDN);
        return mpfr_get_d(r10765, MPFR_RNDN);
}

static mpfr_t r10766, r10767, r10768, r10769, r10770, r10771, r10772, r10773, r10774, r10775, r10776, r10777, r10778, r10779, r10780, r10781, r10782, r10783, r10784, r10785, r10786, r10787, r10788, r10789, r10790, r10791, r10792, r10793, r10794;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10766);
        mpfr_init(r10767);
        mpfr_init(r10768);
        mpfr_init(r10769);
        mpfr_init(r10770);
        mpfr_init(r10771);
        mpfr_init(r10772);
        mpfr_init(r10773);
        mpfr_init(r10774);
        mpfr_init(r10775);
        mpfr_init_set_str(r10776, "-0.00015965096829055196", 10, MPFR_RNDN);
        mpfr_init(r10777);
        mpfr_init_set_str(r10778, "2.9988327787361897e-07", 10, MPFR_RNDN);
        mpfr_init(r10779);
        mpfr_init_set_str(r10780, "2", 10, MPFR_RNDN);
        mpfr_init(r10781);
        mpfr_init(r10782);
        mpfr_init(r10783);
        mpfr_init(r10784);
        mpfr_init(r10785);
        mpfr_init(r10786);
        mpfr_init(r10787);
        mpfr_init(r10788);
        mpfr_init(r10789);
        mpfr_init(r10790);
        mpfr_init(r10791);
        mpfr_init(r10792);
        mpfr_init(r10793);
        mpfr_init(r10794);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r10766, x, MPFR_RNDN);
        mpfr_cos(r10767, r10766, MPFR_RNDN);
        mpfr_set_d(r10768, eps, MPFR_RNDN);
        mpfr_sin(r10769, r10768, MPFR_RNDN);
        mpfr_mul(r10770, r10767, r10769, MPFR_RNDN);
        mpfr_sin(r10771, r10766, MPFR_RNDN);
        mpfr_sub(r10772, r10770, r10771, MPFR_RNDN);
        mpfr_cos(r10773, r10768, MPFR_RNDN);
        mpfr_mul(r10774, r10773, r10771, MPFR_RNDN);
        mpfr_add(r10775, r10772, r10774, MPFR_RNDN);
        ;
        mpfr_set_si(r10777, mpfr_cmp(r10775, r10776) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10779, mpfr_cmp(r10775, r10778) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r10781, r10768, r10780, MPFR_RNDN);
        mpfr_sin(r10782, r10781, MPFR_RNDN);
        mpfr_add(r10783, r10766, r10766, MPFR_RNDN);
        mpfr_add(r10784, r10768, r10783, MPFR_RNDN);
        mpfr_div(r10785, r10784, r10780, MPFR_RNDN);
        mpfr_cos(r10786, r10785, MPFR_RNDN);
        mpfr_log1p(r10787, r10786, MPFR_RNDN);
        mpfr_expm1(r10788, r10787, MPFR_RNDN);
        mpfr_mul(r10789, r10782, r10788, MPFR_RNDN);
        mpfr_mul(r10790, r10780, r10789, MPFR_RNDN);
        mpfr_add(r10791, r10770, r10774, MPFR_RNDN);
        mpfr_sub(r10792, r10791, r10771, MPFR_RNDN);
        if (mpfr_get_si(r10779, MPFR_RNDN)) { mpfr_set(r10793, r10790, MPFR_RNDN); } else { mpfr_set(r10793, r10792, MPFR_RNDN); };
        if (mpfr_get_si(r10777, MPFR_RNDN)) { mpfr_set(r10794, r10775, MPFR_RNDN); } else { mpfr_set(r10794, r10793, MPFR_RNDN); };
        return mpfr_get_d(r10794, MPFR_RNDN);
}

static mpfr_t r10795, r10796, r10797, r10798, r10799, r10800, r10801, r10802, r10803, r10804, r10805, r10806, r10807, r10808, r10809, r10810, r10811, r10812, r10813, r10814, r10815, r10816, r10817, r10818, r10819, r10820, r10821, r10822, r10823;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10795);
        mpfr_init(r10796);
        mpfr_init(r10797);
        mpfr_init(r10798);
        mpfr_init(r10799);
        mpfr_init(r10800);
        mpfr_init(r10801);
        mpfr_init(r10802);
        mpfr_init(r10803);
        mpfr_init(r10804);
        mpfr_init_set_str(r10805, "-0.00015965096829055196", 10, MPFR_RNDN);
        mpfr_init(r10806);
        mpfr_init_set_str(r10807, "2.9988327787361897e-07", 10, MPFR_RNDN);
        mpfr_init(r10808);
        mpfr_init_set_str(r10809, "2", 10, MPFR_RNDN);
        mpfr_init(r10810);
        mpfr_init(r10811);
        mpfr_init(r10812);
        mpfr_init(r10813);
        mpfr_init(r10814);
        mpfr_init(r10815);
        mpfr_init(r10816);
        mpfr_init(r10817);
        mpfr_init(r10818);
        mpfr_init(r10819);
        mpfr_init(r10820);
        mpfr_init(r10821);
        mpfr_init(r10822);
        mpfr_init(r10823);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r10795, x, MPFR_RNDN);
        mpfr_cos(r10796, r10795, MPFR_RNDN);
        mpfr_set_d(r10797, eps, MPFR_RNDN);
        mpfr_sin(r10798, r10797, MPFR_RNDN);
        mpfr_mul(r10799, r10796, r10798, MPFR_RNDN);
        mpfr_sin(r10800, r10795, MPFR_RNDN);
        mpfr_sub(r10801, r10799, r10800, MPFR_RNDN);
        mpfr_cos(r10802, r10797, MPFR_RNDN);
        mpfr_mul(r10803, r10802, r10800, MPFR_RNDN);
        mpfr_add(r10804, r10801, r10803, MPFR_RNDN);
        ;
        mpfr_set_si(r10806, mpfr_cmp(r10804, r10805) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r10808, mpfr_cmp(r10804, r10807) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r10810, r10797, r10809, MPFR_RNDN);
        mpfr_sin(r10811, r10810, MPFR_RNDN);
        mpfr_add(r10812, r10795, r10795, MPFR_RNDN);
        mpfr_add(r10813, r10797, r10812, MPFR_RNDN);
        mpfr_div(r10814, r10813, r10809, MPFR_RNDN);
        mpfr_cos(r10815, r10814, MPFR_RNDN);
        mpfr_log1p(r10816, r10815, MPFR_RNDN);
        mpfr_expm1(r10817, r10816, MPFR_RNDN);
        mpfr_mul(r10818, r10811, r10817, MPFR_RNDN);
        mpfr_mul(r10819, r10809, r10818, MPFR_RNDN);
        mpfr_add(r10820, r10799, r10803, MPFR_RNDN);
        mpfr_sub(r10821, r10820, r10800, MPFR_RNDN);
        if (mpfr_get_si(r10808, MPFR_RNDN)) { mpfr_set(r10822, r10819, MPFR_RNDN); } else { mpfr_set(r10822, r10821, MPFR_RNDN); };
        if (mpfr_get_si(r10806, MPFR_RNDN)) { mpfr_set(r10823, r10804, MPFR_RNDN); } else { mpfr_set(r10823, r10822, MPFR_RNDN); };
        return mpfr_get_d(r10823, MPFR_RNDN);
}

