#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 r8056 = x;
        float r8057 = sin(r8056);
        float r8058 = r8056 - r8057;
        float r8059 = tan(r8056);
        float r8060 = r8056 - r8059;
        float r8061 = r8058 / r8060;
        return r8061;
}

double f_id(double x) {
        double r8062 = x;
        double r8063 = sin(r8062);
        double r8064 = r8062 - r8063;
        double r8065 = tan(r8062);
        double r8066 = r8062 - r8065;
        double r8067 = r8064 / r8066;
        return r8067;
}


double f_of(float x) {
        float r8068 = x;
        float r8069 = -0.027921673083418638;
        bool r8070 = r8068 <= r8069;
        float r8071 = 0.02891418620245072;
        bool r8072 = r8068 <= r8071;
        float r8073 = !r8072;
        bool r8074 = r8070 || r8073;
        float r8075 = tan(r8068);
        float r8076 = r8068 - r8075;
        float r8077 = r8068 / r8076;
        float r8078 = sin(r8068);
        float r8079 = r8078 / r8076;
        float r8080 = r8077 - r8079;
        float r8081 = 9/40;
        float r8082 = r8081 * r8068;
        float r8083 = r8068 * r8082;
        float r8084 = 4;
        float r8085 = pow(r8068, r8084);
        float r8086 = 27/2800;
        float r8087 = 1/2;
        float r8088 = fma(r8085, r8086, r8087);
        float r8089 = r8083 - r8088;
        float r8090 = r8074 ? r8080 : r8089;
        return r8090;
}

double f_od(double x) {
        double r8091 = x;
        double r8092 = -0.027921673083418638;
        bool r8093 = r8091 <= r8092;
        double r8094 = 0.02891418620245072;
        bool r8095 = r8091 <= r8094;
        double r8096 = !r8095;
        bool r8097 = r8093 || r8096;
        double r8098 = tan(r8091);
        double r8099 = r8091 - r8098;
        double r8100 = r8091 / r8099;
        double r8101 = sin(r8091);
        double r8102 = r8101 / r8099;
        double r8103 = r8100 - r8102;
        double r8104 = 9/40;
        double r8105 = r8104 * r8091;
        double r8106 = r8091 * r8105;
        double r8107 = 4;
        double r8108 = pow(r8091, r8107);
        double r8109 = 27/2800;
        double r8110 = 1/2;
        double r8111 = fma(r8108, r8109, r8110);
        double r8112 = r8106 - r8111;
        double r8113 = r8097 ? r8103 : r8112;
        return r8113;
}

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 r8114, r8115, r8116, r8117, r8118, r8119;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8114);
        mpfr_init(r8115);
        mpfr_init(r8116);
        mpfr_init(r8117);
        mpfr_init(r8118);
        mpfr_init(r8119);
}

double f_im(double x) {
        mpfr_set_d(r8114, x, MPFR_RNDN);
        mpfr_sin(r8115, r8114, MPFR_RNDN);
        mpfr_sub(r8116, r8114, r8115, MPFR_RNDN);
        mpfr_tan(r8117, r8114, MPFR_RNDN);
        mpfr_sub(r8118, r8114, r8117, MPFR_RNDN);
        mpfr_div(r8119, r8116, r8118, MPFR_RNDN);
        return mpfr_get_d(r8119, MPFR_RNDN);
}

static mpfr_t r8120, r8121, r8122, r8123, r8124, r8125, r8126, r8127, r8128, r8129, r8130, r8131, r8132, r8133, r8134, r8135, r8136, r8137, r8138, r8139, r8140, r8141, r8142;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8120);
        mpfr_init_set_str(r8121, "-0.027921673083418638", 10, MPFR_RNDN);
        mpfr_init(r8122);
        mpfr_init_set_str(r8123, "0.02891418620245072", 10, MPFR_RNDN);
        mpfr_init(r8124);
        mpfr_init(r8125);
        mpfr_init(r8126);
        mpfr_init(r8127);
        mpfr_init(r8128);
        mpfr_init(r8129);
        mpfr_init(r8130);
        mpfr_init(r8131);
        mpfr_init(r8132);
        mpfr_init_set_str(r8133, "9/40", 10, MPFR_RNDN);
        mpfr_init(r8134);
        mpfr_init(r8135);
        mpfr_init_set_str(r8136, "4", 10, MPFR_RNDN);
        mpfr_init(r8137);
        mpfr_init_set_str(r8138, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r8139, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8140);
        mpfr_init(r8141);
        mpfr_init(r8142);
}

double f_fm(double x) {
        mpfr_set_d(r8120, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8122, mpfr_cmp(r8120, r8121) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8124, mpfr_cmp(r8120, r8123) <= 0, MPFR_RNDN);
        mpfr_set_si(r8125, !mpfr_get_si(r8124, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r8126, mpfr_get_si(r8122, MPFR_RNDN) || mpfr_get_si(r8125, MPFR_RNDN), MPFR_RNDN);
        mpfr_tan(r8127, r8120, MPFR_RNDN);
        mpfr_sub(r8128, r8120, r8127, MPFR_RNDN);
        mpfr_div(r8129, r8120, r8128, MPFR_RNDN);
        mpfr_sin(r8130, r8120, MPFR_RNDN);
        mpfr_div(r8131, r8130, r8128, MPFR_RNDN);
        mpfr_sub(r8132, r8129, r8131, MPFR_RNDN);
        ;
        mpfr_mul(r8134, r8133, r8120, MPFR_RNDN);
        mpfr_mul(r8135, r8120, r8134, MPFR_RNDN);
        ;
        mpfr_pow(r8137, r8120, r8136, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r8140, r8137, r8138, r8139, MPFR_RNDN);
        mpfr_sub(r8141, r8135, r8140, MPFR_RNDN);
        if (mpfr_get_si(r8126, MPFR_RNDN)) { mpfr_set(r8142, r8132, MPFR_RNDN); } else { mpfr_set(r8142, r8141, MPFR_RNDN); };
        return mpfr_get_d(r8142, MPFR_RNDN);
}

static mpfr_t r8143, r8144, r8145, r8146, r8147, r8148, r8149, r8150, r8151, r8152, r8153, r8154, r8155, r8156, r8157, r8158, r8159, r8160, r8161, r8162, r8163, r8164, r8165;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8143);
        mpfr_init_set_str(r8144, "-0.027921673083418638", 10, MPFR_RNDN);
        mpfr_init(r8145);
        mpfr_init_set_str(r8146, "0.02891418620245072", 10, MPFR_RNDN);
        mpfr_init(r8147);
        mpfr_init(r8148);
        mpfr_init(r8149);
        mpfr_init(r8150);
        mpfr_init(r8151);
        mpfr_init(r8152);
        mpfr_init(r8153);
        mpfr_init(r8154);
        mpfr_init(r8155);
        mpfr_init_set_str(r8156, "9/40", 10, MPFR_RNDN);
        mpfr_init(r8157);
        mpfr_init(r8158);
        mpfr_init_set_str(r8159, "4", 10, MPFR_RNDN);
        mpfr_init(r8160);
        mpfr_init_set_str(r8161, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r8162, "1/2", 10, MPFR_RNDN);
        mpfr_init(r8163);
        mpfr_init(r8164);
        mpfr_init(r8165);
}

double f_dm(double x) {
        mpfr_set_d(r8143, x, MPFR_RNDN);
        ;
        mpfr_set_si(r8145, mpfr_cmp(r8143, r8144) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8147, mpfr_cmp(r8143, r8146) <= 0, MPFR_RNDN);
        mpfr_set_si(r8148, !mpfr_get_si(r8147, MPFR_RNDN), MPFR_RNDN);
        mpfr_set_si(r8149, mpfr_get_si(r8145, MPFR_RNDN) || mpfr_get_si(r8148, MPFR_RNDN), MPFR_RNDN);
        mpfr_tan(r8150, r8143, MPFR_RNDN);
        mpfr_sub(r8151, r8143, r8150, MPFR_RNDN);
        mpfr_div(r8152, r8143, r8151, MPFR_RNDN);
        mpfr_sin(r8153, r8143, MPFR_RNDN);
        mpfr_div(r8154, r8153, r8151, MPFR_RNDN);
        mpfr_sub(r8155, r8152, r8154, MPFR_RNDN);
        ;
        mpfr_mul(r8157, r8156, r8143, MPFR_RNDN);
        mpfr_mul(r8158, r8143, r8157, MPFR_RNDN);
        ;
        mpfr_pow(r8160, r8143, r8159, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r8163, r8160, r8161, r8162, MPFR_RNDN);
        mpfr_sub(r8164, r8158, r8163, MPFR_RNDN);
        if (mpfr_get_si(r8149, MPFR_RNDN)) { mpfr_set(r8165, r8155, MPFR_RNDN); } else { mpfr_set(r8165, r8164, MPFR_RNDN); };
        return mpfr_get_d(r8165, MPFR_RNDN);
}

