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

char *name = "tanhf (example 3.4)";

double f_if(float x) {
        float r4875060 = 1.0f;
        float r4875061 = x;
        float r4875062 = cos(r4875061);
        float r4875063 = r4875060 - r4875062;
        float r4875064 = sin(r4875061);
        float r4875065 = r4875063 / r4875064;
        return r4875065;
}

double f_id(double x) {
        double r4875066 = 1.0;
        double r4875067 = x;
        double r4875068 = cos(r4875067);
        double r4875069 = r4875066 - r4875068;
        double r4875070 = sin(r4875067);
        double r4875071 = r4875069 / r4875070;
        return r4875071;
}


double f_of(float x) {
        float r4875072 = x;
        float r4875073 = -3.859884253300168e-07f;
        bool r4875074 = r4875072 <= r4875073;
        float r4875075 = 1.0f;
        float r4875076 = cos(r4875072);
        float r4875077 = r4875075 - r4875076;
        float r4875078 = sin(r4875072);
        float r4875079 = r4875077 / r4875078;
        float r4875080 = exp(r4875079);
        float r4875081 = log(r4875080);
        float r4875082 = 3.0084490837019413e-50f;
        bool r4875083 = r4875072 <= r4875082;
        float r4875084 = 0.041666666666666664f;
        float r4875085 = 3.0f;
        float r4875086 = pow(r4875072, r4875085);
        float r4875087 = r4875084 * r4875086;
        float r4875088 = 0.004166666666666667f;
        float r4875089 = 5.0f;
        float r4875090 = pow(r4875072, r4875089);
        float r4875091 = r4875088 * r4875090;
        float r4875092 = 0.5f;
        float r4875093 = r4875092 * r4875072;
        float r4875094 = r4875091 + r4875093;
        float r4875095 = r4875087 + r4875094;
        float r4875096 = r4875078 * r4875078;
        float r4875097 = r4875075 + r4875076;
        float r4875098 = r4875096 / r4875097;
        float r4875099 = r4875098 / r4875078;
        float r4875100 = r4875083 ? r4875095 : r4875099;
        float r4875101 = r4875074 ? r4875081 : r4875100;
        return r4875101;
}

double f_od(double x) {
        double r4875102 = x;
        double r4875103 = -3.859884253300168e-07;
        bool r4875104 = r4875102 <= r4875103;
        double r4875105 = 1.0;
        double r4875106 = cos(r4875102);
        double r4875107 = r4875105 - r4875106;
        double r4875108 = sin(r4875102);
        double r4875109 = r4875107 / r4875108;
        double r4875110 = exp(r4875109);
        double r4875111 = log(r4875110);
        double r4875112 = 3.0084490837019413e-50;
        bool r4875113 = r4875102 <= r4875112;
        double r4875114 = 0.041666666666666664;
        double r4875115 = 3.0;
        double r4875116 = pow(r4875102, r4875115);
        double r4875117 = r4875114 * r4875116;
        double r4875118 = 0.004166666666666667;
        double r4875119 = 5.0;
        double r4875120 = pow(r4875102, r4875119);
        double r4875121 = r4875118 * r4875120;
        double r4875122 = 0.5;
        double r4875123 = r4875122 * r4875102;
        double r4875124 = r4875121 + r4875123;
        double r4875125 = r4875117 + r4875124;
        double r4875126 = r4875108 * r4875108;
        double r4875127 = r4875105 + r4875106;
        double r4875128 = r4875126 / r4875127;
        double r4875129 = r4875128 / r4875108;
        double r4875130 = r4875113 ? r4875125 : r4875129;
        double r4875131 = r4875104 ? r4875111 : r4875130;
        return r4875131;
}

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 r4875132, r4875133, r4875134, r4875135, r4875136, r4875137;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r4875132, "1", 10, MPFR_RNDN);
        mpfr_init(r4875133);
        mpfr_init(r4875134);
        mpfr_init(r4875135);
        mpfr_init(r4875136);
        mpfr_init(r4875137);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4875133, x, MPFR_RNDN);
        mpfr_cos(r4875134, r4875133, MPFR_RNDN);
        mpfr_sub(r4875135, r4875132, r4875134, MPFR_RNDN);
        mpfr_sin(r4875136, r4875133, MPFR_RNDN);
        mpfr_div(r4875137, r4875135, r4875136, MPFR_RNDN);
        return mpfr_get_d(r4875137, MPFR_RNDN);
}

static mpfr_t r4875138, r4875139, r4875140, r4875141, r4875142, r4875143, r4875144, r4875145, r4875146, r4875147, r4875148, r4875149, r4875150, r4875151, r4875152, r4875153, r4875154, r4875155, r4875156, r4875157, r4875158, r4875159, r4875160, r4875161, r4875162, r4875163, r4875164, r4875165, r4875166, r4875167;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4875138);
        mpfr_init_set_str(r4875139, "-3.859884253300168e-07", 10, MPFR_RNDN);
        mpfr_init(r4875140);
        mpfr_init_set_str(r4875141, "1", 10, MPFR_RNDN);
        mpfr_init(r4875142);
        mpfr_init(r4875143);
        mpfr_init(r4875144);
        mpfr_init(r4875145);
        mpfr_init(r4875146);
        mpfr_init(r4875147);
        mpfr_init_set_str(r4875148, "3.0084490837019413e-50", 10, MPFR_RNDN);
        mpfr_init(r4875149);
        mpfr_init_set_str(r4875150, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r4875151, "3", 10, MPFR_RNDN);
        mpfr_init(r4875152);
        mpfr_init(r4875153);
        mpfr_init_set_str(r4875154, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r4875155, "5", 10, MPFR_RNDN);
        mpfr_init(r4875156);
        mpfr_init(r4875157);
        mpfr_init_set_str(r4875158, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4875159);
        mpfr_init(r4875160);
        mpfr_init(r4875161);
        mpfr_init(r4875162);
        mpfr_init(r4875163);
        mpfr_init(r4875164);
        mpfr_init(r4875165);
        mpfr_init(r4875166);
        mpfr_init(r4875167);
}

double f_fm(double x) {
        mpfr_set_d(r4875138, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4875140, mpfr_cmp(r4875138, r4875139) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r4875142, r4875138, MPFR_RNDN);
        mpfr_sub(r4875143, r4875141, r4875142, MPFR_RNDN);
        mpfr_sin(r4875144, r4875138, MPFR_RNDN);
        mpfr_div(r4875145, r4875143, r4875144, MPFR_RNDN);
        mpfr_exp(r4875146, r4875145, MPFR_RNDN);
        mpfr_log(r4875147, r4875146, MPFR_RNDN);
        ;
        mpfr_set_si(r4875149, mpfr_cmp(r4875138, r4875148) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4875152, r4875138, r4875151, MPFR_RNDN);
        mpfr_mul(r4875153, r4875150, r4875152, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4875156, r4875138, r4875155, MPFR_RNDN);
        mpfr_mul(r4875157, r4875154, r4875156, MPFR_RNDN);
        ;
        mpfr_mul(r4875159, r4875158, r4875138, MPFR_RNDN);
        mpfr_add(r4875160, r4875157, r4875159, MPFR_RNDN);
        mpfr_add(r4875161, r4875153, r4875160, MPFR_RNDN);
        mpfr_mul(r4875162, r4875144, r4875144, MPFR_RNDN);
        mpfr_add(r4875163, r4875141, r4875142, MPFR_RNDN);
        mpfr_div(r4875164, r4875162, r4875163, MPFR_RNDN);
        mpfr_div(r4875165, r4875164, r4875144, MPFR_RNDN);
        if (mpfr_get_si(r4875149, MPFR_RNDN)) { mpfr_set(r4875166, r4875161, MPFR_RNDN); } else { mpfr_set(r4875166, r4875165, MPFR_RNDN); };
        if (mpfr_get_si(r4875140, MPFR_RNDN)) { mpfr_set(r4875167, r4875147, MPFR_RNDN); } else { mpfr_set(r4875167, r4875166, MPFR_RNDN); };
        return mpfr_get_d(r4875167, MPFR_RNDN);
}

static mpfr_t r4875168, r4875169, r4875170, r4875171, r4875172, r4875173, r4875174, r4875175, r4875176, r4875177, r4875178, r4875179, r4875180, r4875181, r4875182, r4875183, r4875184, r4875185, r4875186, r4875187, r4875188, r4875189, r4875190, r4875191, r4875192, r4875193, r4875194, r4875195, r4875196, r4875197;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4875168);
        mpfr_init_set_str(r4875169, "-3.859884253300168e-07", 10, MPFR_RNDN);
        mpfr_init(r4875170);
        mpfr_init_set_str(r4875171, "1", 10, MPFR_RNDN);
        mpfr_init(r4875172);
        mpfr_init(r4875173);
        mpfr_init(r4875174);
        mpfr_init(r4875175);
        mpfr_init(r4875176);
        mpfr_init(r4875177);
        mpfr_init_set_str(r4875178, "3.0084490837019413e-50", 10, MPFR_RNDN);
        mpfr_init(r4875179);
        mpfr_init_set_str(r4875180, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r4875181, "3", 10, MPFR_RNDN);
        mpfr_init(r4875182);
        mpfr_init(r4875183);
        mpfr_init_set_str(r4875184, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r4875185, "5", 10, MPFR_RNDN);
        mpfr_init(r4875186);
        mpfr_init(r4875187);
        mpfr_init_set_str(r4875188, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4875189);
        mpfr_init(r4875190);
        mpfr_init(r4875191);
        mpfr_init(r4875192);
        mpfr_init(r4875193);
        mpfr_init(r4875194);
        mpfr_init(r4875195);
        mpfr_init(r4875196);
        mpfr_init(r4875197);
}

double f_dm(double x) {
        mpfr_set_d(r4875168, x, MPFR_RNDN);
        ;
        mpfr_set_si(r4875170, mpfr_cmp(r4875168, r4875169) <= 0, MPFR_RNDN);
        ;
        mpfr_cos(r4875172, r4875168, MPFR_RNDN);
        mpfr_sub(r4875173, r4875171, r4875172, MPFR_RNDN);
        mpfr_sin(r4875174, r4875168, MPFR_RNDN);
        mpfr_div(r4875175, r4875173, r4875174, MPFR_RNDN);
        mpfr_exp(r4875176, r4875175, MPFR_RNDN);
        mpfr_log(r4875177, r4875176, MPFR_RNDN);
        ;
        mpfr_set_si(r4875179, mpfr_cmp(r4875168, r4875178) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4875182, r4875168, r4875181, MPFR_RNDN);
        mpfr_mul(r4875183, r4875180, r4875182, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4875186, r4875168, r4875185, MPFR_RNDN);
        mpfr_mul(r4875187, r4875184, r4875186, MPFR_RNDN);
        ;
        mpfr_mul(r4875189, r4875188, r4875168, MPFR_RNDN);
        mpfr_add(r4875190, r4875187, r4875189, MPFR_RNDN);
        mpfr_add(r4875191, r4875183, r4875190, MPFR_RNDN);
        mpfr_mul(r4875192, r4875174, r4875174, MPFR_RNDN);
        mpfr_add(r4875193, r4875171, r4875172, MPFR_RNDN);
        mpfr_div(r4875194, r4875192, r4875193, MPFR_RNDN);
        mpfr_div(r4875195, r4875194, r4875174, MPFR_RNDN);
        if (mpfr_get_si(r4875179, MPFR_RNDN)) { mpfr_set(r4875196, r4875191, MPFR_RNDN); } else { mpfr_set(r4875196, r4875195, MPFR_RNDN); };
        if (mpfr_get_si(r4875170, MPFR_RNDN)) { mpfr_set(r4875197, r4875177, MPFR_RNDN); } else { mpfr_set(r4875197, r4875196, MPFR_RNDN); };
        return mpfr_get_d(r4875197, MPFR_RNDN);
}

