#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 r27648 = x;
        float r27649 = eps;
        float r27650 = r27648 + r27649;
        float r27651 = sin(r27650);
        float r27652 = sin(r27648);
        float r27653 = r27651 - r27652;
        return r27653;
}

double f_id(double x, double eps) {
        double r27654 = x;
        double r27655 = eps;
        double r27656 = r27654 + r27655;
        double r27657 = sin(r27656);
        double r27658 = sin(r27654);
        double r27659 = r27657 - r27658;
        return r27659;
}


double f_of(float x, float eps) {
        float r27660 = x;
        float r27661 = sin(r27660);
        float r27662 = eps;
        float r27663 = cos(r27662);
        float r27664 = r27661 * r27663;
        float r27665 = cos(r27660);
        float r27666 = sin(r27662);
        float r27667 = r27665 * r27666;
        float r27668 = r27667 - r27661;
        float r27669 = r27664 + r27668;
        float r27670 = -1.2733325417874189e-07;
        bool r27671 = r27669 <= r27670;
        float r27672 = 1.7814748755176977e-60;
        bool r27673 = r27669 <= r27672;
        float r27674 = 2;
        float r27675 = r27662 / r27674;
        float r27676 = sin(r27675);
        float r27677 = r27662 + r27660;
        float r27678 = r27660 + r27677;
        float r27679 = r27678 / r27674;
        float r27680 = cos(r27679);
        float r27681 = expm1(r27680);
        float r27682 = log1p(r27681);
        float r27683 = r27676 * r27682;
        float r27684 = r27674 * r27683;
        float r27685 = r27664 + r27667;
        float r27686 = r27685 - r27661;
        float r27687 = r27673 ? r27684 : r27686;
        float r27688 = r27671 ? r27669 : r27687;
        return r27688;
}

double f_od(double x, double eps) {
        double r27689 = x;
        double r27690 = sin(r27689);
        double r27691 = eps;
        double r27692 = cos(r27691);
        double r27693 = r27690 * r27692;
        double r27694 = cos(r27689);
        double r27695 = sin(r27691);
        double r27696 = r27694 * r27695;
        double r27697 = r27696 - r27690;
        double r27698 = r27693 + r27697;
        double r27699 = -1.2733325417874189e-07;
        bool r27700 = r27698 <= r27699;
        double r27701 = 1.7814748755176977e-60;
        bool r27702 = r27698 <= r27701;
        double r27703 = 2;
        double r27704 = r27691 / r27703;
        double r27705 = sin(r27704);
        double r27706 = r27691 + r27689;
        double r27707 = r27689 + r27706;
        double r27708 = r27707 / r27703;
        double r27709 = cos(r27708);
        double r27710 = expm1(r27709);
        double r27711 = log1p(r27710);
        double r27712 = r27705 * r27711;
        double r27713 = r27703 * r27712;
        double r27714 = r27693 + r27696;
        double r27715 = r27714 - r27690;
        double r27716 = r27702 ? r27713 : r27715;
        double r27717 = r27700 ? r27698 : r27716;
        return r27717;
}

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 r27718, r27719, r27720, r27721, r27722, r27723;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27718);
        mpfr_init(r27719);
        mpfr_init(r27720);
        mpfr_init(r27721);
        mpfr_init(r27722);
        mpfr_init(r27723);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27718, x, MPFR_RNDN);
        mpfr_set_d(r27719, eps, MPFR_RNDN);
        mpfr_add(r27720, r27718, r27719, MPFR_RNDN);
        mpfr_sin(r27721, r27720, MPFR_RNDN);
        mpfr_sin(r27722, r27718, MPFR_RNDN);
        mpfr_sub(r27723, r27721, r27722, MPFR_RNDN);
        return mpfr_get_d(r27723, MPFR_RNDN);
}

static mpfr_t r27724, r27725, r27726, r27727, r27728, r27729, r27730, r27731, r27732, r27733, r27734, r27735, r27736, r27737, r27738, r27739, r27740, r27741, r27742, r27743, r27744, r27745, r27746, r27747, r27748, r27749, r27750, r27751, r27752;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27724);
        mpfr_init(r27725);
        mpfr_init(r27726);
        mpfr_init(r27727);
        mpfr_init(r27728);
        mpfr_init(r27729);
        mpfr_init(r27730);
        mpfr_init(r27731);
        mpfr_init(r27732);
        mpfr_init(r27733);
        mpfr_init_set_str(r27734, "-1.2733325417874189e-07", 10, MPFR_RNDN);
        mpfr_init(r27735);
        mpfr_init_set_str(r27736, "1.7814748755176977e-60", 10, MPFR_RNDN);
        mpfr_init(r27737);
        mpfr_init_set_str(r27738, "2", 10, MPFR_RNDN);
        mpfr_init(r27739);
        mpfr_init(r27740);
        mpfr_init(r27741);
        mpfr_init(r27742);
        mpfr_init(r27743);
        mpfr_init(r27744);
        mpfr_init(r27745);
        mpfr_init(r27746);
        mpfr_init(r27747);
        mpfr_init(r27748);
        mpfr_init(r27749);
        mpfr_init(r27750);
        mpfr_init(r27751);
        mpfr_init(r27752);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r27724, x, MPFR_RNDN);
        mpfr_sin(r27725, r27724, MPFR_RNDN);
        mpfr_set_d(r27726, eps, MPFR_RNDN);
        mpfr_cos(r27727, r27726, MPFR_RNDN);
        mpfr_mul(r27728, r27725, r27727, MPFR_RNDN);
        mpfr_cos(r27729, r27724, MPFR_RNDN);
        mpfr_sin(r27730, r27726, MPFR_RNDN);
        mpfr_mul(r27731, r27729, r27730, MPFR_RNDN);
        mpfr_sub(r27732, r27731, r27725, MPFR_RNDN);
        mpfr_add(r27733, r27728, r27732, MPFR_RNDN);
        ;
        mpfr_set_si(r27735, mpfr_cmp(r27733, r27734) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27737, mpfr_cmp(r27733, r27736) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27739, r27726, r27738, MPFR_RNDN);
        mpfr_sin(r27740, r27739, MPFR_RNDN);
        mpfr_add(r27741, r27726, r27724, MPFR_RNDN);
        mpfr_add(r27742, r27724, r27741, MPFR_RNDN);
        mpfr_div(r27743, r27742, r27738, MPFR_RNDN);
        mpfr_cos(r27744, r27743, MPFR_RNDN);
        mpfr_expm1(r27745, r27744, MPFR_RNDN);
        mpfr_log1p(r27746, r27745, MPFR_RNDN);
        mpfr_mul(r27747, r27740, r27746, MPFR_RNDN);
        mpfr_mul(r27748, r27738, r27747, MPFR_RNDN);
        mpfr_add(r27749, r27728, r27731, MPFR_RNDN);
        mpfr_sub(r27750, r27749, r27725, MPFR_RNDN);
        if (mpfr_get_si(r27737, MPFR_RNDN)) { mpfr_set(r27751, r27748, MPFR_RNDN); } else { mpfr_set(r27751, r27750, MPFR_RNDN); };
        if (mpfr_get_si(r27735, MPFR_RNDN)) { mpfr_set(r27752, r27733, MPFR_RNDN); } else { mpfr_set(r27752, r27751, MPFR_RNDN); };
        return mpfr_get_d(r27752, MPFR_RNDN);
}

static mpfr_t r27753, r27754, r27755, r27756, r27757, r27758, r27759, r27760, r27761, r27762, r27763, r27764, r27765, r27766, r27767, r27768, r27769, r27770, r27771, r27772, r27773, r27774, r27775, r27776, r27777, r27778, r27779, r27780, r27781;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27753);
        mpfr_init(r27754);
        mpfr_init(r27755);
        mpfr_init(r27756);
        mpfr_init(r27757);
        mpfr_init(r27758);
        mpfr_init(r27759);
        mpfr_init(r27760);
        mpfr_init(r27761);
        mpfr_init(r27762);
        mpfr_init_set_str(r27763, "-1.2733325417874189e-07", 10, MPFR_RNDN);
        mpfr_init(r27764);
        mpfr_init_set_str(r27765, "1.7814748755176977e-60", 10, MPFR_RNDN);
        mpfr_init(r27766);
        mpfr_init_set_str(r27767, "2", 10, MPFR_RNDN);
        mpfr_init(r27768);
        mpfr_init(r27769);
        mpfr_init(r27770);
        mpfr_init(r27771);
        mpfr_init(r27772);
        mpfr_init(r27773);
        mpfr_init(r27774);
        mpfr_init(r27775);
        mpfr_init(r27776);
        mpfr_init(r27777);
        mpfr_init(r27778);
        mpfr_init(r27779);
        mpfr_init(r27780);
        mpfr_init(r27781);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r27753, x, MPFR_RNDN);
        mpfr_sin(r27754, r27753, MPFR_RNDN);
        mpfr_set_d(r27755, eps, MPFR_RNDN);
        mpfr_cos(r27756, r27755, MPFR_RNDN);
        mpfr_mul(r27757, r27754, r27756, MPFR_RNDN);
        mpfr_cos(r27758, r27753, MPFR_RNDN);
        mpfr_sin(r27759, r27755, MPFR_RNDN);
        mpfr_mul(r27760, r27758, r27759, MPFR_RNDN);
        mpfr_sub(r27761, r27760, r27754, MPFR_RNDN);
        mpfr_add(r27762, r27757, r27761, MPFR_RNDN);
        ;
        mpfr_set_si(r27764, mpfr_cmp(r27762, r27763) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r27766, mpfr_cmp(r27762, r27765) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27768, r27755, r27767, MPFR_RNDN);
        mpfr_sin(r27769, r27768, MPFR_RNDN);
        mpfr_add(r27770, r27755, r27753, MPFR_RNDN);
        mpfr_add(r27771, r27753, r27770, MPFR_RNDN);
        mpfr_div(r27772, r27771, r27767, MPFR_RNDN);
        mpfr_cos(r27773, r27772, MPFR_RNDN);
        mpfr_expm1(r27774, r27773, MPFR_RNDN);
        mpfr_log1p(r27775, r27774, MPFR_RNDN);
        mpfr_mul(r27776, r27769, r27775, MPFR_RNDN);
        mpfr_mul(r27777, r27767, r27776, MPFR_RNDN);
        mpfr_add(r27778, r27757, r27760, MPFR_RNDN);
        mpfr_sub(r27779, r27778, r27754, MPFR_RNDN);
        if (mpfr_get_si(r27766, MPFR_RNDN)) { mpfr_set(r27780, r27777, MPFR_RNDN); } else { mpfr_set(r27780, r27779, MPFR_RNDN); };
        if (mpfr_get_si(r27764, MPFR_RNDN)) { mpfr_set(r27781, r27762, MPFR_RNDN); } else { mpfr_set(r27781, r27780, MPFR_RNDN); };
        return mpfr_get_d(r27781, MPFR_RNDN);
}

