#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 r59073 = x;
        float r59074 = eps;
        float r59075 = r59073 + r59074;
        float r59076 = sin(r59075);
        float r59077 = sin(r59073);
        float r59078 = r59076 - r59077;
        return r59078;
}

double f_id(double x, double eps) {
        double r59079 = x;
        double r59080 = eps;
        double r59081 = r59079 + r59080;
        double r59082 = sin(r59081);
        double r59083 = sin(r59079);
        double r59084 = r59082 - r59083;
        return r59084;
}


double f_of(float x, float eps) {
        float r59085 = eps;
        float r59086 = -4.937900603750566e-17;
        bool r59087 = r59085 <= r59086;
        float r59088 = x;
        float r59089 = sin(r59088);
        float r59090 = cos(r59085);
        float r59091 = r59089 * r59090;
        float r59092 = cos(r59088);
        float r59093 = sin(r59085);
        float r59094 = r59092 * r59093;
        float r59095 = r59094 - r59089;
        float r59096 = r59091 + r59095;
        float r59097 = 4.088262929564001e-08;
        bool r59098 = r59085 <= r59097;
        float r59099 = 2;
        float r59100 = r59085 / r59099;
        float r59101 = sin(r59100);
        float r59102 = r59088 + r59088;
        float r59103 = r59085 + r59102;
        float r59104 = r59103 / r59099;
        float r59105 = cos(r59104);
        float r59106 = r59101 * r59105;
        float r59107 = r59099 * r59106;
        float r59108 = r59098 ? r59107 : r59096;
        float r59109 = r59087 ? r59096 : r59108;
        return r59109;
}

double f_od(double x, double eps) {
        double r59110 = eps;
        double r59111 = -4.937900603750566e-17;
        bool r59112 = r59110 <= r59111;
        double r59113 = x;
        double r59114 = sin(r59113);
        double r59115 = cos(r59110);
        double r59116 = r59114 * r59115;
        double r59117 = cos(r59113);
        double r59118 = sin(r59110);
        double r59119 = r59117 * r59118;
        double r59120 = r59119 - r59114;
        double r59121 = r59116 + r59120;
        double r59122 = 4.088262929564001e-08;
        bool r59123 = r59110 <= r59122;
        double r59124 = 2;
        double r59125 = r59110 / r59124;
        double r59126 = sin(r59125);
        double r59127 = r59113 + r59113;
        double r59128 = r59110 + r59127;
        double r59129 = r59128 / r59124;
        double r59130 = cos(r59129);
        double r59131 = r59126 * r59130;
        double r59132 = r59124 * r59131;
        double r59133 = r59123 ? r59132 : r59121;
        double r59134 = r59112 ? r59121 : r59133;
        return r59134;
}

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 r59135, r59136, r59137, r59138, r59139, r59140;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r59135);
        mpfr_init(r59136);
        mpfr_init(r59137);
        mpfr_init(r59138);
        mpfr_init(r59139);
        mpfr_init(r59140);
}

double f_im(double x, double eps) {
        mpfr_set_d(r59135, x, MPFR_RNDN);
        mpfr_set_d(r59136, eps, MPFR_RNDN);
        mpfr_add(r59137, r59135, r59136, MPFR_RNDN);
        mpfr_sin(r59138, r59137, MPFR_RNDN);
        mpfr_sin(r59139, r59135, MPFR_RNDN);
        mpfr_sub(r59140, r59138, r59139, MPFR_RNDN);
        return mpfr_get_d(r59140, MPFR_RNDN);
}

static mpfr_t r59141, r59142, r59143, r59144, r59145, r59146, r59147, r59148, r59149, r59150, r59151, r59152, r59153, r59154, r59155, r59156, r59157, r59158, r59159, r59160, r59161, r59162, r59163, r59164, r59165;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r59141);
        mpfr_init_set_str(r59142, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r59143);
        mpfr_init(r59144);
        mpfr_init(r59145);
        mpfr_init(r59146);
        mpfr_init(r59147);
        mpfr_init(r59148);
        mpfr_init(r59149);
        mpfr_init(r59150);
        mpfr_init(r59151);
        mpfr_init(r59152);
        mpfr_init_set_str(r59153, "4.088262929564001e-08", 10, MPFR_RNDN);
        mpfr_init(r59154);
        mpfr_init_set_str(r59155, "2", 10, MPFR_RNDN);
        mpfr_init(r59156);
        mpfr_init(r59157);
        mpfr_init(r59158);
        mpfr_init(r59159);
        mpfr_init(r59160);
        mpfr_init(r59161);
        mpfr_init(r59162);
        mpfr_init(r59163);
        mpfr_init(r59164);
        mpfr_init(r59165);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r59141, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r59143, mpfr_cmp(r59141, r59142) <= 0, MPFR_RNDN);
        mpfr_set_d(r59144, x, MPFR_RNDN);
        mpfr_sin(r59145, r59144, MPFR_RNDN);
        mpfr_cos(r59146, r59141, MPFR_RNDN);
        mpfr_mul(r59147, r59145, r59146, MPFR_RNDN);
        mpfr_cos(r59148, r59144, MPFR_RNDN);
        mpfr_sin(r59149, r59141, MPFR_RNDN);
        mpfr_mul(r59150, r59148, r59149, MPFR_RNDN);
        mpfr_sub(r59151, r59150, r59145, MPFR_RNDN);
        mpfr_add(r59152, r59147, r59151, MPFR_RNDN);
        ;
        mpfr_set_si(r59154, mpfr_cmp(r59141, r59153) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r59156, r59141, r59155, MPFR_RNDN);
        mpfr_sin(r59157, r59156, MPFR_RNDN);
        mpfr_add(r59158, r59144, r59144, MPFR_RNDN);
        mpfr_add(r59159, r59141, r59158, MPFR_RNDN);
        mpfr_div(r59160, r59159, r59155, MPFR_RNDN);
        mpfr_cos(r59161, r59160, MPFR_RNDN);
        mpfr_mul(r59162, r59157, r59161, MPFR_RNDN);
        mpfr_mul(r59163, r59155, r59162, MPFR_RNDN);
        if (mpfr_get_si(r59154, MPFR_RNDN)) { mpfr_set(r59164, r59163, MPFR_RNDN); } else { mpfr_set(r59164, r59152, MPFR_RNDN); };
        if (mpfr_get_si(r59143, MPFR_RNDN)) { mpfr_set(r59165, r59152, MPFR_RNDN); } else { mpfr_set(r59165, r59164, MPFR_RNDN); };
        return mpfr_get_d(r59165, MPFR_RNDN);
}

static mpfr_t r59166, r59167, r59168, r59169, r59170, r59171, r59172, r59173, r59174, r59175, r59176, r59177, r59178, r59179, r59180, r59181, r59182, r59183, r59184, r59185, r59186, r59187, r59188, r59189, r59190;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r59166);
        mpfr_init_set_str(r59167, "-4.937900603750566e-17", 10, MPFR_RNDN);
        mpfr_init(r59168);
        mpfr_init(r59169);
        mpfr_init(r59170);
        mpfr_init(r59171);
        mpfr_init(r59172);
        mpfr_init(r59173);
        mpfr_init(r59174);
        mpfr_init(r59175);
        mpfr_init(r59176);
        mpfr_init(r59177);
        mpfr_init_set_str(r59178, "4.088262929564001e-08", 10, MPFR_RNDN);
        mpfr_init(r59179);
        mpfr_init_set_str(r59180, "2", 10, MPFR_RNDN);
        mpfr_init(r59181);
        mpfr_init(r59182);
        mpfr_init(r59183);
        mpfr_init(r59184);
        mpfr_init(r59185);
        mpfr_init(r59186);
        mpfr_init(r59187);
        mpfr_init(r59188);
        mpfr_init(r59189);
        mpfr_init(r59190);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r59166, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r59168, mpfr_cmp(r59166, r59167) <= 0, MPFR_RNDN);
        mpfr_set_d(r59169, x, MPFR_RNDN);
        mpfr_sin(r59170, r59169, MPFR_RNDN);
        mpfr_cos(r59171, r59166, MPFR_RNDN);
        mpfr_mul(r59172, r59170, r59171, MPFR_RNDN);
        mpfr_cos(r59173, r59169, MPFR_RNDN);
        mpfr_sin(r59174, r59166, MPFR_RNDN);
        mpfr_mul(r59175, r59173, r59174, MPFR_RNDN);
        mpfr_sub(r59176, r59175, r59170, MPFR_RNDN);
        mpfr_add(r59177, r59172, r59176, MPFR_RNDN);
        ;
        mpfr_set_si(r59179, mpfr_cmp(r59166, r59178) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r59181, r59166, r59180, MPFR_RNDN);
        mpfr_sin(r59182, r59181, MPFR_RNDN);
        mpfr_add(r59183, r59169, r59169, MPFR_RNDN);
        mpfr_add(r59184, r59166, r59183, MPFR_RNDN);
        mpfr_div(r59185, r59184, r59180, MPFR_RNDN);
        mpfr_cos(r59186, r59185, MPFR_RNDN);
        mpfr_mul(r59187, r59182, r59186, MPFR_RNDN);
        mpfr_mul(r59188, r59180, r59187, MPFR_RNDN);
        if (mpfr_get_si(r59179, MPFR_RNDN)) { mpfr_set(r59189, r59188, MPFR_RNDN); } else { mpfr_set(r59189, r59177, MPFR_RNDN); };
        if (mpfr_get_si(r59168, MPFR_RNDN)) { mpfr_set(r59190, r59177, MPFR_RNDN); } else { mpfr_set(r59190, r59189, MPFR_RNDN); };
        return mpfr_get_d(r59190, MPFR_RNDN);
}

