#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 r58697 = x;
        float r58698 = eps;
        float r58699 = r58697 + r58698;
        float r58700 = sin(r58699);
        float r58701 = sin(r58697);
        float r58702 = r58700 - r58701;
        return r58702;
}

double f_id(double x, double eps) {
        double r58703 = x;
        double r58704 = eps;
        double r58705 = r58703 + r58704;
        double r58706 = sin(r58705);
        double r58707 = sin(r58703);
        double r58708 = r58706 - r58707;
        return r58708;
}


double f_of(float x, float eps) {
        float r58709 = eps;
        float r58710 = -9.473127049996519e-09;
        bool r58711 = r58709 <= r58710;
        float r58712 = x;
        float r58713 = sin(r58712);
        float r58714 = cos(r58709);
        float r58715 = r58713 * r58714;
        float r58716 = cos(r58712);
        float r58717 = sin(r58709);
        float r58718 = r58716 * r58717;
        float r58719 = r58718 - r58713;
        float r58720 = r58715 + r58719;
        float r58721 = 1.3414614579139239e-08;
        bool r58722 = r58709 <= r58721;
        float r58723 = 2;
        float r58724 = r58709 / r58723;
        float r58725 = sin(r58724);
        float r58726 = r58712 + r58712;
        float r58727 = r58709 + r58726;
        float r58728 = r58727 / r58723;
        float r58729 = cos(r58728);
        float r58730 = r58725 * r58729;
        float r58731 = r58723 * r58730;
        float r58732 = r58722 ? r58731 : r58720;
        float r58733 = r58711 ? r58720 : r58732;
        return r58733;
}

double f_od(double x, double eps) {
        double r58734 = eps;
        double r58735 = -9.473127049996519e-09;
        bool r58736 = r58734 <= r58735;
        double r58737 = x;
        double r58738 = sin(r58737);
        double r58739 = cos(r58734);
        double r58740 = r58738 * r58739;
        double r58741 = cos(r58737);
        double r58742 = sin(r58734);
        double r58743 = r58741 * r58742;
        double r58744 = r58743 - r58738;
        double r58745 = r58740 + r58744;
        double r58746 = 1.3414614579139239e-08;
        bool r58747 = r58734 <= r58746;
        double r58748 = 2;
        double r58749 = r58734 / r58748;
        double r58750 = sin(r58749);
        double r58751 = r58737 + r58737;
        double r58752 = r58734 + r58751;
        double r58753 = r58752 / r58748;
        double r58754 = cos(r58753);
        double r58755 = r58750 * r58754;
        double r58756 = r58748 * r58755;
        double r58757 = r58747 ? r58756 : r58745;
        double r58758 = r58736 ? r58745 : r58757;
        return r58758;
}

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 r58759, r58760, r58761, r58762, r58763, r58764;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58759);
        mpfr_init(r58760);
        mpfr_init(r58761);
        mpfr_init(r58762);
        mpfr_init(r58763);
        mpfr_init(r58764);
}

double f_im(double x, double eps) {
        mpfr_set_d(r58759, x, MPFR_RNDN);
        mpfr_set_d(r58760, eps, MPFR_RNDN);
        mpfr_add(r58761, r58759, r58760, MPFR_RNDN);
        mpfr_sin(r58762, r58761, MPFR_RNDN);
        mpfr_sin(r58763, r58759, MPFR_RNDN);
        mpfr_sub(r58764, r58762, r58763, MPFR_RNDN);
        return mpfr_get_d(r58764, MPFR_RNDN);
}

static mpfr_t r58765, r58766, r58767, r58768, r58769, r58770, r58771, r58772, r58773, r58774, r58775, r58776, r58777, r58778, r58779, r58780, r58781, r58782, r58783, r58784, r58785, r58786, r58787, r58788, r58789;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58765);
        mpfr_init_set_str(r58766, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r58767);
        mpfr_init(r58768);
        mpfr_init(r58769);
        mpfr_init(r58770);
        mpfr_init(r58771);
        mpfr_init(r58772);
        mpfr_init(r58773);
        mpfr_init(r58774);
        mpfr_init(r58775);
        mpfr_init(r58776);
        mpfr_init_set_str(r58777, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r58778);
        mpfr_init_set_str(r58779, "2", 10, MPFR_RNDN);
        mpfr_init(r58780);
        mpfr_init(r58781);
        mpfr_init(r58782);
        mpfr_init(r58783);
        mpfr_init(r58784);
        mpfr_init(r58785);
        mpfr_init(r58786);
        mpfr_init(r58787);
        mpfr_init(r58788);
        mpfr_init(r58789);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r58765, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58767, mpfr_cmp(r58765, r58766) <= 0, MPFR_RNDN);
        mpfr_set_d(r58768, x, MPFR_RNDN);
        mpfr_sin(r58769, r58768, MPFR_RNDN);
        mpfr_cos(r58770, r58765, MPFR_RNDN);
        mpfr_mul(r58771, r58769, r58770, MPFR_RNDN);
        mpfr_cos(r58772, r58768, MPFR_RNDN);
        mpfr_sin(r58773, r58765, MPFR_RNDN);
        mpfr_mul(r58774, r58772, r58773, MPFR_RNDN);
        mpfr_sub(r58775, r58774, r58769, MPFR_RNDN);
        mpfr_add(r58776, r58771, r58775, MPFR_RNDN);
        ;
        mpfr_set_si(r58778, mpfr_cmp(r58765, r58777) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58780, r58765, r58779, MPFR_RNDN);
        mpfr_sin(r58781, r58780, MPFR_RNDN);
        mpfr_add(r58782, r58768, r58768, MPFR_RNDN);
        mpfr_add(r58783, r58765, r58782, MPFR_RNDN);
        mpfr_div(r58784, r58783, r58779, MPFR_RNDN);
        mpfr_cos(r58785, r58784, MPFR_RNDN);
        mpfr_mul(r58786, r58781, r58785, MPFR_RNDN);
        mpfr_mul(r58787, r58779, r58786, MPFR_RNDN);
        if (mpfr_get_si(r58778, MPFR_RNDN)) { mpfr_set(r58788, r58787, MPFR_RNDN); } else { mpfr_set(r58788, r58776, MPFR_RNDN); };
        if (mpfr_get_si(r58767, MPFR_RNDN)) { mpfr_set(r58789, r58776, MPFR_RNDN); } else { mpfr_set(r58789, r58788, MPFR_RNDN); };
        return mpfr_get_d(r58789, MPFR_RNDN);
}

static mpfr_t r58790, r58791, r58792, r58793, r58794, r58795, r58796, r58797, r58798, r58799, r58800, r58801, r58802, r58803, r58804, r58805, r58806, r58807, r58808, r58809, r58810, r58811, r58812, r58813, r58814;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r58790);
        mpfr_init_set_str(r58791, "-9.473127049996519e-09", 10, MPFR_RNDN);
        mpfr_init(r58792);
        mpfr_init(r58793);
        mpfr_init(r58794);
        mpfr_init(r58795);
        mpfr_init(r58796);
        mpfr_init(r58797);
        mpfr_init(r58798);
        mpfr_init(r58799);
        mpfr_init(r58800);
        mpfr_init(r58801);
        mpfr_init_set_str(r58802, "1.3414614579139239e-08", 10, MPFR_RNDN);
        mpfr_init(r58803);
        mpfr_init_set_str(r58804, "2", 10, MPFR_RNDN);
        mpfr_init(r58805);
        mpfr_init(r58806);
        mpfr_init(r58807);
        mpfr_init(r58808);
        mpfr_init(r58809);
        mpfr_init(r58810);
        mpfr_init(r58811);
        mpfr_init(r58812);
        mpfr_init(r58813);
        mpfr_init(r58814);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r58790, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r58792, mpfr_cmp(r58790, r58791) <= 0, MPFR_RNDN);
        mpfr_set_d(r58793, x, MPFR_RNDN);
        mpfr_sin(r58794, r58793, MPFR_RNDN);
        mpfr_cos(r58795, r58790, MPFR_RNDN);
        mpfr_mul(r58796, r58794, r58795, MPFR_RNDN);
        mpfr_cos(r58797, r58793, MPFR_RNDN);
        mpfr_sin(r58798, r58790, MPFR_RNDN);
        mpfr_mul(r58799, r58797, r58798, MPFR_RNDN);
        mpfr_sub(r58800, r58799, r58794, MPFR_RNDN);
        mpfr_add(r58801, r58796, r58800, MPFR_RNDN);
        ;
        mpfr_set_si(r58803, mpfr_cmp(r58790, r58802) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r58805, r58790, r58804, MPFR_RNDN);
        mpfr_sin(r58806, r58805, MPFR_RNDN);
        mpfr_add(r58807, r58793, r58793, MPFR_RNDN);
        mpfr_add(r58808, r58790, r58807, MPFR_RNDN);
        mpfr_div(r58809, r58808, r58804, MPFR_RNDN);
        mpfr_cos(r58810, r58809, MPFR_RNDN);
        mpfr_mul(r58811, r58806, r58810, MPFR_RNDN);
        mpfr_mul(r58812, r58804, r58811, MPFR_RNDN);
        if (mpfr_get_si(r58803, MPFR_RNDN)) { mpfr_set(r58813, r58812, MPFR_RNDN); } else { mpfr_set(r58813, r58801, MPFR_RNDN); };
        if (mpfr_get_si(r58792, MPFR_RNDN)) { mpfr_set(r58814, r58801, MPFR_RNDN); } else { mpfr_set(r58814, r58813, MPFR_RNDN); };
        return mpfr_get_d(r58814, MPFR_RNDN);
}

