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

char *name = "sintan (problem 3.4.5)";

double f_if(float x) {
        float r8044 = x;
        float r8045 = sin(r8044);
        float r8046 = r8044 - r8045;
        float r8047 = tan(r8044);
        float r8048 = r8044 - r8047;
        float r8049 = r8046 / r8048;
        return r8049;
}

double f_id(double x) {
        double r8050 = x;
        double r8051 = sin(r8050);
        double r8052 = r8050 - r8051;
        double r8053 = tan(r8050);
        double r8054 = r8050 - r8053;
        double r8055 = r8052 / r8054;
        return r8055;
}


double f_of(float x) {
        float r8056 = x;
        float r8057 = -0.027921673083418638;
        bool r8058 = r8056 <= r8057;
        float r8059 = 0.02891418620245072;
        bool r8060 = r8056 <= r8059;
        float r8061 = !r8060;
        bool r8062 = r8058 || r8061;
        float r8063 = tan(r8056);
        float r8064 = r8056 - r8063;
        float r8065 = r8056 / r8064;
        float r8066 = sin(r8056);
        float r8067 = r8066 / r8064;
        float r8068 = r8065 - r8067;
        float r8069 = 9/40;
        float r8070 = r8069 * r8056;
        float r8071 = r8056 * r8070;
        float r8072 = 4;
        float r8073 = pow(r8056, r8072);
        float r8074 = 27/2800;
        float r8075 = 1/2;
        float r8076 = fma(r8073, r8074, r8075);
        float r8077 = r8071 - r8076;
        float r8078 = r8062 ? r8068 : r8077;
        return r8078;
}

double f_od(double x) {
        double r8079 = x;
        double r8080 = -0.027921673083418638;
        bool r8081 = r8079 <= r8080;
        double r8082 = 0.02891418620245072;
        bool r8083 = r8079 <= r8082;
        double r8084 = !r8083;
        bool r8085 = r8081 || r8084;
        double r8086 = tan(r8079);
        double r8087 = r8079 - r8086;
        double r8088 = r8079 / r8087;
        double r8089 = sin(r8079);
        double r8090 = r8089 / r8087;
        double r8091 = r8088 - r8090;
        double r8092 = 9/40;
        double r8093 = r8092 * r8079;
        double r8094 = r8079 * r8093;
        double r8095 = 4;
        double r8096 = pow(r8079, r8095);
        double r8097 = 27/2800;
        double r8098 = 1/2;
        double r8099 = fma(r8096, r8097, r8098);
        double r8100 = r8094 - r8099;
        double r8101 = r8085 ? r8091 : r8100;
        return r8101;
}

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 r8102, r8103, r8104, r8105, r8106, r8107;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8102);
        mpfr_init(r8103);
        mpfr_init(r8104);
        mpfr_init(r8105);
        mpfr_init(r8106);
        mpfr_init(r8107);
}

double f_im(double x) {
        mpfr_set_d(r8102, x, MPFR_RNDN);
        mpfr_sin(r8103, r8102, MPFR_RNDN);
        mpfr_sub(r8104, r8102, r8103, MPFR_RNDN);
        mpfr_tan(r8105, r8102, MPFR_RNDN);
        mpfr_sub(r8106, r8102, r8105, MPFR_RNDN);
        mpfr_div(r8107, r8104, r8106, MPFR_RNDN);
        return mpfr_get_d(r8107, MPFR_RNDN);
}

static mpfr_t r8108, r8109, r8110, r8111, r8112, r8113, r8114, r8115, r8116, r8117, r8118, r8119, r8120, r8121, r8122, r8123, r8124, r8125, r8126, r8127, r8128, r8129, r8130;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8108);
        mpfr_init_set_str(r8109, "-0.027921673083418638", 10, MPFR_RNDN);
        mpfr_init(r8110);
        mpfr_init_set_str(r8111, "0.02891418620245072", 10, MPFR_RNDN);
        mpfr_init(r8112);
        mpfr_init(r8113);
        mpfr_init(r8114);
        mpfr_init(r8115);
        mpfr_init(r8116);
        mpfr_init(r8117);
        mpfr_init(r8118);
        mpfr_init(r8119);
        mpfr_init(r8120);
        mpfr_init_set_str(r8121, "9/40", 10, MPFR_RNDN);
        mpfr_init(r8122);
        mpfr_init(r8123);
        mpfr_init_set_str(r8124, "4", 10, MPFR_RNDN);
        mpfr_init(r8125);
        mpfr_init_set_str(r8126, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r8127, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8128);
        mpfr_init(r8129);
        mpfr_init(r8130);
}

double f_fm(double x) {
        mpfr_set_d(r8108, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8110, mpfr_cmp(r8108, r8109) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8112, mpfr_cmp(r8108, r8111) <= 0, MPFR_RNDN);
        mpfr_set_si(r8113, !mpfr_get_si(r8112, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r8114, mpfr_get_si(r8110, MPFR_RNDN) || mpfr_get_si(r8113, MPFR_RNDN), MPFR_RNDN);
        mpfr_tan(r8115, r8108, MPFR_RNDN);
        mpfr_sub(r8116, r8108, r8115, MPFR_RNDN);
        mpfr_div(r8117, r8108, r8116, MPFR_RNDN);
        mpfr_sin(r8118, r8108, MPFR_RNDN);
        mpfr_div(r8119, r8118, r8116, MPFR_RNDN);
        mpfr_sub(r8120, r8117, r8119, MPFR_RNDN);
        ;
        mpfr_mul(r8122, r8121, r8108, MPFR_RNDN);
        mpfr_mul(r8123, r8108, r8122, MPFR_RNDN);
        ;
        mpfr_pow(r8125, r8108, r8124, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r8128, r8125, r8126, r8127, MPFR_RNDN);
        mpfr_sub(r8129, r8123, r8128, MPFR_RNDN);
        if (mpfr_get_si(r8114, MPFR_RNDN)) { mpfr_set(r8130, r8120, MPFR_RNDN); } else { mpfr_set(r8130, r8129, MPFR_RNDN); };
        return mpfr_get_d(r8130, MPFR_RNDN);
}

static mpfr_t r8131, r8132, r8133, r8134, r8135, r8136, r8137, r8138, r8139, r8140, r8141, r8142, r8143, r8144, r8145, r8146, r8147, r8148, r8149, r8150, r8151, r8152, r8153;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8131);
        mpfr_init_set_str(r8132, "-0.027921673083418638", 10, MPFR_RNDN);
        mpfr_init(r8133);
        mpfr_init_set_str(r8134, "0.02891418620245072", 10, MPFR_RNDN);
        mpfr_init(r8135);
        mpfr_init(r8136);
        mpfr_init(r8137);
        mpfr_init(r8138);
        mpfr_init(r8139);
        mpfr_init(r8140);
        mpfr_init(r8141);
        mpfr_init(r8142);
        mpfr_init(r8143);
        mpfr_init_set_str(r8144, "9/40", 10, MPFR_RNDN);
        mpfr_init(r8145);
        mpfr_init(r8146);
        mpfr_init_set_str(r8147, "4", 10, MPFR_RNDN);
        mpfr_init(r8148);
        mpfr_init_set_str(r8149, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r8150, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8151);
        mpfr_init(r8152);
        mpfr_init(r8153);
}

double f_dm(double x) {
        mpfr_set_d(r8131, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8133, mpfr_cmp(r8131, r8132) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8135, mpfr_cmp(r8131, r8134) <= 0, MPFR_RNDN);
        mpfr_set_si(r8136, !mpfr_get_si(r8135, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r8137, mpfr_get_si(r8133, MPFR_RNDN) || mpfr_get_si(r8136, MPFR_RNDN), MPFR_RNDN);
        mpfr_tan(r8138, r8131, MPFR_RNDN);
        mpfr_sub(r8139, r8131, r8138, MPFR_RNDN);
        mpfr_div(r8140, r8131, r8139, MPFR_RNDN);
        mpfr_sin(r8141, r8131, MPFR_RNDN);
        mpfr_div(r8142, r8141, r8139, MPFR_RNDN);
        mpfr_sub(r8143, r8140, r8142, MPFR_RNDN);
        ;
        mpfr_mul(r8145, r8144, r8131, MPFR_RNDN);
        mpfr_mul(r8146, r8131, r8145, MPFR_RNDN);
        ;
        mpfr_pow(r8148, r8131, r8147, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r8151, r8148, r8149, r8150, MPFR_RNDN);
        mpfr_sub(r8152, r8146, r8151, MPFR_RNDN);
        if (mpfr_get_si(r8137, MPFR_RNDN)) { mpfr_set(r8153, r8143, MPFR_RNDN); } else { mpfr_set(r8153, r8152, MPFR_RNDN); };
        return mpfr_get_d(r8153, MPFR_RNDN);
}

