#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 r27033 = x;
        float r27034 = eps;
        float r27035 = r27033 + r27034;
        float r27036 = sin(r27035);
        float r27037 = sin(r27033);
        float r27038 = r27036 - r27037;
        return r27038;
}

double f_id(double x, double eps) {
        double r27039 = x;
        double r27040 = eps;
        double r27041 = r27039 + r27040;
        double r27042 = sin(r27041);
        double r27043 = sin(r27039);
        double r27044 = r27042 - r27043;
        return r27044;
}


double f_of(float x, float eps) {
        float r27045 = 2;
        float r27046 = eps;
        float r27047 = r27046 / r27045;
        float r27048 = sin(r27047);
        float r27049 = x;
        float r27050 = r27046 + r27049;
        float r27051 = r27049 + r27050;
        float r27052 = r27051 / r27045;
        float r27053 = cos(r27052);
        float r27054 = exp(r27053);
        float r27055 = log(r27054);
        float r27056 = r27048 * r27055;
        float r27057 = r27045 * r27056;
        float r27058 = -3.175813843817344e-10;
        bool r27059 = r27057 <= r27058;
        float r27060 = sin(r27049);
        float r27061 = cos(r27046);
        float r27062 = r27060 * r27061;
        float r27063 = cos(r27049);
        float r27064 = sin(r27046);
        float r27065 = r27063 * r27064;
        float r27066 = r27062 + r27065;
        float r27067 = r27066 - r27060;
        float r27068 = 3.052874304905588e-06;
        bool r27069 = r27057 <= r27068;
        float r27070 = log1p(r27053);
        float r27071 = expm1(r27070);
        float r27072 = r27048 * r27071;
        float r27073 = r27045 * r27072;
        float r27074 = r27065 - r27060;
        float r27075 = r27062 + r27074;
        float r27076 = r27069 ? r27073 : r27075;
        float r27077 = r27059 ? r27067 : r27076;
        return r27077;
}

double f_od(double x, double eps) {
        double r27078 = 2;
        double r27079 = eps;
        double r27080 = r27079 / r27078;
        double r27081 = sin(r27080);
        double r27082 = x;
        double r27083 = r27079 + r27082;
        double r27084 = r27082 + r27083;
        double r27085 = r27084 / r27078;
        double r27086 = cos(r27085);
        double r27087 = exp(r27086);
        double r27088 = log(r27087);
        double r27089 = r27081 * r27088;
        double r27090 = r27078 * r27089;
        double r27091 = -3.175813843817344e-10;
        bool r27092 = r27090 <= r27091;
        double r27093 = sin(r27082);
        double r27094 = cos(r27079);
        double r27095 = r27093 * r27094;
        double r27096 = cos(r27082);
        double r27097 = sin(r27079);
        double r27098 = r27096 * r27097;
        double r27099 = r27095 + r27098;
        double r27100 = r27099 - r27093;
        double r27101 = 3.052874304905588e-06;
        bool r27102 = r27090 <= r27101;
        double r27103 = log1p(r27086);
        double r27104 = expm1(r27103);
        double r27105 = r27081 * r27104;
        double r27106 = r27078 * r27105;
        double r27107 = r27098 - r27093;
        double r27108 = r27095 + r27107;
        double r27109 = r27102 ? r27106 : r27108;
        double r27110 = r27092 ? r27100 : r27109;
        return r27110;
}

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 r27111, r27112, r27113, r27114, r27115, r27116;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27111);
        mpfr_init(r27112);
        mpfr_init(r27113);
        mpfr_init(r27114);
        mpfr_init(r27115);
        mpfr_init(r27116);
}

double f_im(double x, double eps) {
        mpfr_set_d(r27111, x, MPFR_RNDN);
        mpfr_set_d(r27112, eps, MPFR_RNDN);
        mpfr_add(r27113, r27111, r27112, MPFR_RNDN);
        mpfr_sin(r27114, r27113, MPFR_RNDN);
        mpfr_sin(r27115, r27111, MPFR_RNDN);
        mpfr_sub(r27116, r27114, r27115, MPFR_RNDN);
        return mpfr_get_d(r27116, MPFR_RNDN);
}

static mpfr_t r27117, r27118, r27119, r27120, r27121, r27122, r27123, r27124, r27125, r27126, r27127, r27128, r27129, r27130, r27131, r27132, r27133, r27134, r27135, r27136, r27137, r27138, r27139, r27140, r27141, r27142, r27143, r27144, r27145, r27146, r27147, r27148, r27149;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27117, "2", 10, MPFR_RNDN);
        mpfr_init(r27118);
        mpfr_init(r27119);
        mpfr_init(r27120);
        mpfr_init(r27121);
        mpfr_init(r27122);
        mpfr_init(r27123);
        mpfr_init(r27124);
        mpfr_init(r27125);
        mpfr_init(r27126);
        mpfr_init(r27127);
        mpfr_init(r27128);
        mpfr_init(r27129);
        mpfr_init_set_str(r27130, "-3.175813843817344e-10", 10, MPFR_RNDN);
        mpfr_init(r27131);
        mpfr_init(r27132);
        mpfr_init(r27133);
        mpfr_init(r27134);
        mpfr_init(r27135);
        mpfr_init(r27136);
        mpfr_init(r27137);
        mpfr_init(r27138);
        mpfr_init(r27139);
        mpfr_init_set_str(r27140, "3.052874304905588e-06", 10, MPFR_RNDN);
        mpfr_init(r27141);
        mpfr_init(r27142);
        mpfr_init(r27143);
        mpfr_init(r27144);
        mpfr_init(r27145);
        mpfr_init(r27146);
        mpfr_init(r27147);
        mpfr_init(r27148);
        mpfr_init(r27149);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r27118, eps, MPFR_RNDN);
        mpfr_div(r27119, r27118, r27117, MPFR_RNDN);
        mpfr_sin(r27120, r27119, MPFR_RNDN);
        mpfr_set_d(r27121, x, MPFR_RNDN);
        mpfr_add(r27122, r27118, r27121, MPFR_RNDN);
        mpfr_add(r27123, r27121, r27122, MPFR_RNDN);
        mpfr_div(r27124, r27123, r27117, MPFR_RNDN);
        mpfr_cos(r27125, r27124, MPFR_RNDN);
        mpfr_exp(r27126, r27125, MPFR_RNDN);
        mpfr_log(r27127, r27126, MPFR_RNDN);
        mpfr_mul(r27128, r27120, r27127, MPFR_RNDN);
        mpfr_mul(r27129, r27117, r27128, MPFR_RNDN);
        ;
        mpfr_set_si(r27131, mpfr_cmp(r27129, r27130) <= 0, MPFR_RNDN);
        mpfr_sin(r27132, r27121, MPFR_RNDN);
        mpfr_cos(r27133, r27118, MPFR_RNDN);
        mpfr_mul(r27134, r27132, r27133, MPFR_RNDN);
        mpfr_cos(r27135, r27121, MPFR_RNDN);
        mpfr_sin(r27136, r27118, MPFR_RNDN);
        mpfr_mul(r27137, r27135, r27136, MPFR_RNDN);
        mpfr_add(r27138, r27134, r27137, MPFR_RNDN);
        mpfr_sub(r27139, r27138, r27132, MPFR_RNDN);
        ;
        mpfr_set_si(r27141, mpfr_cmp(r27129, r27140) <= 0, MPFR_RNDN);
        mpfr_log1p(r27142, r27125, MPFR_RNDN);
        mpfr_expm1(r27143, r27142, MPFR_RNDN);
        mpfr_mul(r27144, r27120, r27143, MPFR_RNDN);
        mpfr_mul(r27145, r27117, r27144, MPFR_RNDN);
        mpfr_sub(r27146, r27137, r27132, MPFR_RNDN);
        mpfr_add(r27147, r27134, r27146, MPFR_RNDN);
        if (mpfr_get_si(r27141, MPFR_RNDN)) { mpfr_set(r27148, r27145, MPFR_RNDN); } else { mpfr_set(r27148, r27147, MPFR_RNDN); };
        if (mpfr_get_si(r27131, MPFR_RNDN)) { mpfr_set(r27149, r27139, MPFR_RNDN); } else { mpfr_set(r27149, r27148, MPFR_RNDN); };
        return mpfr_get_d(r27149, MPFR_RNDN);
}

static mpfr_t r27150, r27151, r27152, r27153, r27154, r27155, r27156, r27157, r27158, r27159, r27160, r27161, r27162, r27163, r27164, r27165, r27166, r27167, r27168, r27169, r27170, r27171, r27172, r27173, r27174, r27175, r27176, r27177, r27178, r27179, r27180, r27181, r27182;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r27150, "2", 10, MPFR_RNDN);
        mpfr_init(r27151);
        mpfr_init(r27152);
        mpfr_init(r27153);
        mpfr_init(r27154);
        mpfr_init(r27155);
        mpfr_init(r27156);
        mpfr_init(r27157);
        mpfr_init(r27158);
        mpfr_init(r27159);
        mpfr_init(r27160);
        mpfr_init(r27161);
        mpfr_init(r27162);
        mpfr_init_set_str(r27163, "-3.175813843817344e-10", 10, MPFR_RNDN);
        mpfr_init(r27164);
        mpfr_init(r27165);
        mpfr_init(r27166);
        mpfr_init(r27167);
        mpfr_init(r27168);
        mpfr_init(r27169);
        mpfr_init(r27170);
        mpfr_init(r27171);
        mpfr_init(r27172);
        mpfr_init_set_str(r27173, "3.052874304905588e-06", 10, MPFR_RNDN);
        mpfr_init(r27174);
        mpfr_init(r27175);
        mpfr_init(r27176);
        mpfr_init(r27177);
        mpfr_init(r27178);
        mpfr_init(r27179);
        mpfr_init(r27180);
        mpfr_init(r27181);
        mpfr_init(r27182);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r27151, eps, MPFR_RNDN);
        mpfr_div(r27152, r27151, r27150, MPFR_RNDN);
        mpfr_sin(r27153, r27152, MPFR_RNDN);
        mpfr_set_d(r27154, x, MPFR_RNDN);
        mpfr_add(r27155, r27151, r27154, MPFR_RNDN);
        mpfr_add(r27156, r27154, r27155, MPFR_RNDN);
        mpfr_div(r27157, r27156, r27150, MPFR_RNDN);
        mpfr_cos(r27158, r27157, MPFR_RNDN);
        mpfr_exp(r27159, r27158, MPFR_RNDN);
        mpfr_log(r27160, r27159, MPFR_RNDN);
        mpfr_mul(r27161, r27153, r27160, MPFR_RNDN);
        mpfr_mul(r27162, r27150, r27161, MPFR_RNDN);
        ;
        mpfr_set_si(r27164, mpfr_cmp(r27162, r27163) <= 0, MPFR_RNDN);
        mpfr_sin(r27165, r27154, MPFR_RNDN);
        mpfr_cos(r27166, r27151, MPFR_RNDN);
        mpfr_mul(r27167, r27165, r27166, MPFR_RNDN);
        mpfr_cos(r27168, r27154, MPFR_RNDN);
        mpfr_sin(r27169, r27151, MPFR_RNDN);
        mpfr_mul(r27170, r27168, r27169, MPFR_RNDN);
        mpfr_add(r27171, r27167, r27170, MPFR_RNDN);
        mpfr_sub(r27172, r27171, r27165, MPFR_RNDN);
        ;
        mpfr_set_si(r27174, mpfr_cmp(r27162, r27173) <= 0, MPFR_RNDN);
        mpfr_log1p(r27175, r27158, MPFR_RNDN);
        mpfr_expm1(r27176, r27175, MPFR_RNDN);
        mpfr_mul(r27177, r27153, r27176, MPFR_RNDN);
        mpfr_mul(r27178, r27150, r27177, MPFR_RNDN);
        mpfr_sub(r27179, r27170, r27165, MPFR_RNDN);
        mpfr_add(r27180, r27167, r27179, MPFR_RNDN);
        if (mpfr_get_si(r27174, MPFR_RNDN)) { mpfr_set(r27181, r27178, MPFR_RNDN); } else { mpfr_set(r27181, r27180, MPFR_RNDN); };
        if (mpfr_get_si(r27164, MPFR_RNDN)) { mpfr_set(r27182, r27172, MPFR_RNDN); } else { mpfr_set(r27182, r27181, MPFR_RNDN); };
        return mpfr_get_d(r27182, MPFR_RNDN);
}

