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

char *name = "NMSE problem 3.3.2";

double f_if(float x, float eps) {
        float r5320041 = x;
        float r5320042 = eps;
        float r5320043 = r5320041 + r5320042;
        float r5320044 = tan(r5320043);
        float r5320045 = tan(r5320041);
        float r5320046 = r5320044 - r5320045;
        return r5320046;
}

double f_id(double x, double eps) {
        double r5320047 = x;
        double r5320048 = eps;
        double r5320049 = r5320047 + r5320048;
        double r5320050 = tan(r5320049);
        double r5320051 = tan(r5320047);
        double r5320052 = r5320050 - r5320051;
        return r5320052;
}


double f_of(float x, float eps) {
        float r5320053 = eps;
        float r5320054 = -3.1929114467955524e-61f;
        bool r5320055 = r5320053 <= r5320054;
        float r5320056 = 1.0f;
        float r5320057 = x;
        float r5320058 = r5320053 + r5320057;
        float r5320059 = 1.0 / tan(r5320058);
        float r5320060 = r5320059 * (r5320059 * r5320059);
        float r5320061 = cbrt(r5320060);
        float r5320062 = cos(r5320057);
        float r5320063 = sin(r5320057);
        float r5320064 = r5320062 / r5320063;
        float r5320065 = r5320061 / r5320064;
        float r5320066 = r5320056 - r5320065;
        float r5320067 = r5320057 + r5320053;
        float r5320068 = tan(r5320067);
        float r5320069 = r5320066 * r5320068;
        float r5320070 = 0.4439134345824553f;
        bool r5320071 = r5320053 <= r5320070;
        float r5320072 = r5320057 * r5320057;
        float r5320073 = r5320053 * (r5320053 * r5320053);
        float r5320074 = r5320072 * r5320073;
        float r5320075 = 4.0f;
        float r5320076 = pow(r5320053, r5320075);
        float r5320077 = r5320057 * (r5320057 * r5320057);
        float r5320078 = r5320076 * r5320077;
        float r5320079 = r5320074 + r5320078;
        float r5320080 = r5320079 + r5320053;
        float r5320081 = cbrt(r5320059);
        float r5320082 = cbrt(r5320064);
        float r5320083 = r5320081 / r5320082;
        float r5320084 = r5320083 * (r5320083 * r5320083);
        float r5320085 = r5320056 - r5320084;
        float r5320086 = r5320085 * r5320068;
        float r5320087 = r5320071 ? r5320080 : r5320086;
        float r5320088 = r5320055 ? r5320069 : r5320087;
        return r5320088;
}

double f_od(double x, double eps) {
        double r5320089 = eps;
        double r5320090 = -3.1929114467955524e-61;
        bool r5320091 = r5320089 <= r5320090;
        double r5320092 = 1.0;
        double r5320093 = x;
        double r5320094 = r5320089 + r5320093;
        double r5320095 = 1.0 / tan(r5320094);
        double r5320096 = r5320095 * (r5320095 * r5320095);
        double r5320097 = cbrt(r5320096);
        double r5320098 = cos(r5320093);
        double r5320099 = sin(r5320093);
        double r5320100 = r5320098 / r5320099;
        double r5320101 = r5320097 / r5320100;
        double r5320102 = r5320092 - r5320101;
        double r5320103 = r5320093 + r5320089;
        double r5320104 = tan(r5320103);
        double r5320105 = r5320102 * r5320104;
        double r5320106 = 0.4439134345824553;
        bool r5320107 = r5320089 <= r5320106;
        double r5320108 = r5320093 * r5320093;
        double r5320109 = r5320089 * (r5320089 * r5320089);
        double r5320110 = r5320108 * r5320109;
        double r5320111 = 4.0;
        double r5320112 = pow(r5320089, r5320111);
        double r5320113 = r5320093 * (r5320093 * r5320093);
        double r5320114 = r5320112 * r5320113;
        double r5320115 = r5320110 + r5320114;
        double r5320116 = r5320115 + r5320089;
        double r5320117 = cbrt(r5320095);
        double r5320118 = cbrt(r5320100);
        double r5320119 = r5320117 / r5320118;
        double r5320120 = r5320119 * (r5320119 * r5320119);
        double r5320121 = r5320092 - r5320120;
        double r5320122 = r5320121 * r5320104;
        double r5320123 = r5320107 ? r5320116 : r5320122;
        double r5320124 = r5320091 ? r5320105 : r5320123;
        return r5320124;
}

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 r5320125, r5320126, r5320127, r5320128, r5320129, r5320130;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320125);
        mpfr_init(r5320126);
        mpfr_init(r5320127);
        mpfr_init(r5320128);
        mpfr_init(r5320129);
        mpfr_init(r5320130);
}

double f_im(double x, double eps) {
        mpfr_set_d(r5320125, x, MPFR_RNDN);
        mpfr_set_d(r5320126, eps, MPFR_RNDN);
        mpfr_add(r5320127, r5320125, r5320126, MPFR_RNDN);
        mpfr_tan(r5320128, r5320127, MPFR_RNDN);
        mpfr_tan(r5320129, r5320125, MPFR_RNDN);
        mpfr_sub(r5320130, r5320128, r5320129, MPFR_RNDN);
        return mpfr_get_d(r5320130, MPFR_RNDN);
}

static mpfr_t r5320131, r5320132, r5320133, r5320134, r5320135, r5320136, r5320137, r5320138, r5320139, r5320140, r5320141, r5320142, r5320143, r5320144, r5320145, r5320146, r5320147, r5320148, r5320149, r5320150, r5320151, r5320152, r5320153, r5320154, r5320155, r5320156, r5320157, r5320158, r5320159, r5320160, r5320161, r5320162, r5320163, r5320164, r5320165, r5320166;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320131);
        mpfr_init_set_str(r5320132, "-3.1929114467955524e-61", 10, MPFR_RNDN);
        mpfr_init(r5320133);
        mpfr_init_set_str(r5320134, "1", 10, MPFR_RNDN);
        mpfr_init(r5320135);
        mpfr_init(r5320136);
        mpfr_init(r5320137);
        mpfr_init(r5320138);
        mpfr_init(r5320139);
        mpfr_init(r5320140);
        mpfr_init(r5320141);
        mpfr_init(r5320142);
        mpfr_init(r5320143);
        mpfr_init(r5320144);
        mpfr_init(r5320145);
        mpfr_init(r5320146);
        mpfr_init(r5320147);
        mpfr_init_set_str(r5320148, "0.4439134345824553", 10, MPFR_RNDN);
        mpfr_init(r5320149);
        mpfr_init(r5320150);
        mpfr_init(r5320151);
        mpfr_init(r5320152);
        mpfr_init_set_str(r5320153, "4", 10, MPFR_RNDN);
        mpfr_init(r5320154);
        mpfr_init(r5320155);
        mpfr_init(r5320156);
        mpfr_init(r5320157);
        mpfr_init(r5320158);
        mpfr_init(r5320159);
        mpfr_init(r5320160);
        mpfr_init(r5320161);
        mpfr_init(r5320162);
        mpfr_init(r5320163);
        mpfr_init(r5320164);
        mpfr_init(r5320165);
        mpfr_init(r5320166);
}

double f_fm(double x, double eps) {
        mpfr_set_d(r5320131, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5320133, mpfr_cmp(r5320131, r5320132) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5320135, x, MPFR_RNDN);
        mpfr_add(r5320136, r5320131, r5320135, MPFR_RNDN);
        mpfr_cot(r5320137, r5320136, MPFR_RNDN);
        mpfr_mul(r5320138, r5320137, r5320137, MPFR_RNDN); mpfr_mul(r5320138, r5320138, r5320137, MPFR_RNDN);
        mpfr_cbrt(r5320139, r5320138, MPFR_RNDN);
        mpfr_cos(r5320140, r5320135, MPFR_RNDN);
        mpfr_sin(r5320141, r5320135, MPFR_RNDN);
        mpfr_div(r5320142, r5320140, r5320141, MPFR_RNDN);
        mpfr_div(r5320143, r5320139, r5320142, MPFR_RNDN);
        mpfr_sub(r5320144, r5320134, r5320143, MPFR_RNDN);
        mpfr_add(r5320145, r5320135, r5320131, MPFR_RNDN);
        mpfr_tan(r5320146, r5320145, MPFR_RNDN);
        mpfr_mul(r5320147, r5320144, r5320146, MPFR_RNDN);
        ;
        mpfr_set_si(r5320149, mpfr_cmp(r5320131, r5320148) <= 0, MPFR_RNDN);
        mpfr_mul(r5320150, r5320135, r5320135, MPFR_RNDN);
        mpfr_mul(r5320151, r5320131, r5320131, MPFR_RNDN); mpfr_mul(r5320151, r5320151, r5320131, MPFR_RNDN);
        mpfr_mul(r5320152, r5320150, r5320151, MPFR_RNDN);
        ;
        mpfr_pow(r5320154, r5320131, r5320153, MPFR_RNDN);
        mpfr_mul(r5320155, r5320135, r5320135, MPFR_RNDN); mpfr_mul(r5320155, r5320155, r5320135, MPFR_RNDN);
        mpfr_mul(r5320156, r5320154, r5320155, MPFR_RNDN);
        mpfr_add(r5320157, r5320152, r5320156, MPFR_RNDN);
        mpfr_add(r5320158, r5320157, r5320131, MPFR_RNDN);
        mpfr_cbrt(r5320159, r5320137, MPFR_RNDN);
        mpfr_cbrt(r5320160, r5320142, MPFR_RNDN);
        mpfr_div(r5320161, r5320159, r5320160, MPFR_RNDN);
        mpfr_mul(r5320162, r5320161, r5320161, MPFR_RNDN); mpfr_mul(r5320162, r5320162, r5320161, MPFR_RNDN);
        mpfr_sub(r5320163, r5320134, r5320162, MPFR_RNDN);
        mpfr_mul(r5320164, r5320163, r5320146, MPFR_RNDN);
        if (mpfr_get_si(r5320149, MPFR_RNDN)) { mpfr_set(r5320165, r5320158, MPFR_RNDN); } else { mpfr_set(r5320165, r5320164, MPFR_RNDN); };
        if (mpfr_get_si(r5320133, MPFR_RNDN)) { mpfr_set(r5320166, r5320147, MPFR_RNDN); } else { mpfr_set(r5320166, r5320165, MPFR_RNDN); };
        return mpfr_get_d(r5320166, MPFR_RNDN);
}

static mpfr_t r5320167, r5320168, r5320169, r5320170, r5320171, r5320172, r5320173, r5320174, r5320175, r5320176, r5320177, r5320178, r5320179, r5320180, r5320181, r5320182, r5320183, r5320184, r5320185, r5320186, r5320187, r5320188, r5320189, r5320190, r5320191, r5320192, r5320193, r5320194, r5320195, r5320196, r5320197, r5320198, r5320199, r5320200, r5320201, r5320202;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5320167);
        mpfr_init_set_str(r5320168, "-3.1929114467955524e-61", 10, MPFR_RNDN);
        mpfr_init(r5320169);
        mpfr_init_set_str(r5320170, "1", 10, MPFR_RNDN);
        mpfr_init(r5320171);
        mpfr_init(r5320172);
        mpfr_init(r5320173);
        mpfr_init(r5320174);
        mpfr_init(r5320175);
        mpfr_init(r5320176);
        mpfr_init(r5320177);
        mpfr_init(r5320178);
        mpfr_init(r5320179);
        mpfr_init(r5320180);
        mpfr_init(r5320181);
        mpfr_init(r5320182);
        mpfr_init(r5320183);
        mpfr_init_set_str(r5320184, "0.4439134345824553", 10, MPFR_RNDN);
        mpfr_init(r5320185);
        mpfr_init(r5320186);
        mpfr_init(r5320187);
        mpfr_init(r5320188);
        mpfr_init_set_str(r5320189, "4", 10, MPFR_RNDN);
        mpfr_init(r5320190);
        mpfr_init(r5320191);
        mpfr_init(r5320192);
        mpfr_init(r5320193);
        mpfr_init(r5320194);
        mpfr_init(r5320195);
        mpfr_init(r5320196);
        mpfr_init(r5320197);
        mpfr_init(r5320198);
        mpfr_init(r5320199);
        mpfr_init(r5320200);
        mpfr_init(r5320201);
        mpfr_init(r5320202);
}

double f_dm(double x, double eps) {
        mpfr_set_d(r5320167, eps, MPFR_RNDN);
        ;
        mpfr_set_si(r5320169, mpfr_cmp(r5320167, r5320168) <= 0, MPFR_RNDN);
        ;
        mpfr_set_d(r5320171, x, MPFR_RNDN);
        mpfr_add(r5320172, r5320167, r5320171, MPFR_RNDN);
        mpfr_cot(r5320173, r5320172, MPFR_RNDN);
        mpfr_mul(r5320174, r5320173, r5320173, MPFR_RNDN); mpfr_mul(r5320174, r5320174, r5320173, MPFR_RNDN);
        mpfr_cbrt(r5320175, r5320174, MPFR_RNDN);
        mpfr_cos(r5320176, r5320171, MPFR_RNDN);
        mpfr_sin(r5320177, r5320171, MPFR_RNDN);
        mpfr_div(r5320178, r5320176, r5320177, MPFR_RNDN);
        mpfr_div(r5320179, r5320175, r5320178, MPFR_RNDN);
        mpfr_sub(r5320180, r5320170, r5320179, MPFR_RNDN);
        mpfr_add(r5320181, r5320171, r5320167, MPFR_RNDN);
        mpfr_tan(r5320182, r5320181, MPFR_RNDN);
        mpfr_mul(r5320183, r5320180, r5320182, MPFR_RNDN);
        ;
        mpfr_set_si(r5320185, mpfr_cmp(r5320167, r5320184) <= 0, MPFR_RNDN);
        mpfr_mul(r5320186, r5320171, r5320171, MPFR_RNDN);
        mpfr_mul(r5320187, r5320167, r5320167, MPFR_RNDN); mpfr_mul(r5320187, r5320187, r5320167, MPFR_RNDN);
        mpfr_mul(r5320188, r5320186, r5320187, MPFR_RNDN);
        ;
        mpfr_pow(r5320190, r5320167, r5320189, MPFR_RNDN);
        mpfr_mul(r5320191, r5320171, r5320171, MPFR_RNDN); mpfr_mul(r5320191, r5320191, r5320171, MPFR_RNDN);
        mpfr_mul(r5320192, r5320190, r5320191, MPFR_RNDN);
        mpfr_add(r5320193, r5320188, r5320192, MPFR_RNDN);
        mpfr_add(r5320194, r5320193, r5320167, MPFR_RNDN);
        mpfr_cbrt(r5320195, r5320173, MPFR_RNDN);
        mpfr_cbrt(r5320196, r5320178, MPFR_RNDN);
        mpfr_div(r5320197, r5320195, r5320196, MPFR_RNDN);
        mpfr_mul(r5320198, r5320197, r5320197, MPFR_RNDN); mpfr_mul(r5320198, r5320198, r5320197, MPFR_RNDN);
        mpfr_sub(r5320199, r5320170, r5320198, MPFR_RNDN);
        mpfr_mul(r5320200, r5320199, r5320182, MPFR_RNDN);
        if (mpfr_get_si(r5320185, MPFR_RNDN)) { mpfr_set(r5320201, r5320194, MPFR_RNDN); } else { mpfr_set(r5320201, r5320200, MPFR_RNDN); };
        if (mpfr_get_si(r5320169, MPFR_RNDN)) { mpfr_set(r5320202, r5320183, MPFR_RNDN); } else { mpfr_set(r5320202, r5320201, MPFR_RNDN); };
        return mpfr_get_d(r5320202, MPFR_RNDN);
}

