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

char *name = "Hyperbolic tangent";

double f_if(float x) {
        float r30938 = x;
        float r30939 = exp(r30938);
        float r30940 = -r30938;
        float r30941 = exp(r30940);
        float r30942 = r30939 - r30941;
        float r30943 = r30939 + r30941;
        float r30944 = r30942 / r30943;
        return r30944;
}

double f_id(double x) {
        double r30945 = x;
        double r30946 = exp(r30945);
        double r30947 = -r30945;
        double r30948 = exp(r30947);
        double r30949 = r30946 - r30948;
        double r30950 = r30946 + r30948;
        double r30951 = r30949 / r30950;
        return r30951;
}


double f_of(float x) {
        float r30952 = x;
        float r30953 = tanh(r30952);
        return r30953;
}

double f_od(double x) {
        double r30954 = x;
        double r30955 = tanh(r30954);
        return r30955;
}

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 r30956, r30957, r30958, r30959, r30960, r30961, r30962;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r30956);
        mpfr_init(r30957);
        mpfr_init(r30958);
        mpfr_init(r30959);
        mpfr_init(r30960);
        mpfr_init(r30961);
        mpfr_init(r30962);
}

double f_im(double x) {
        mpfr_set_d(r30956, x, MPFR_RNDN);
        mpfr_exp(r30957, r30956, MPFR_RNDN);
        mpfr_neg(r30958, r30956, MPFR_RNDN);
        mpfr_exp(r30959, r30958, MPFR_RNDN);
        mpfr_sub(r30960, r30957, r30959, MPFR_RNDN);
        mpfr_add(r30961, r30957, r30959, MPFR_RNDN);
        mpfr_div(r30962, r30960, r30961, MPFR_RNDN);
        return mpfr_get_d(r30962, MPFR_RNDN);
}

static mpfr_t r30963, r30964;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r30963);
        mpfr_init(r30964);
}

double f_fm(double x) {
        mpfr_set_d(r30963, x, MPFR_RNDN);
        mpfr_tanh(r30964, r30963, MPFR_RNDN);
        return mpfr_get_d(r30964, MPFR_RNDN);
}

static mpfr_t r30965, r30966;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r30965);
        mpfr_init(r30966);
}

double f_dm(double x) {
        mpfr_set_d(r30965, x, MPFR_RNDN);
        mpfr_tanh(r30966, r30965, MPFR_RNDN);
        return mpfr_get_d(r30966, MPFR_RNDN);
}

