#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 r31335 = x;
        float r31336 = exp(r31335);
        float r31337 = -r31335;
        float r31338 = exp(r31337);
        float r31339 = r31336 - r31338;
        float r31340 = r31336 + r31338;
        float r31341 = r31339 / r31340;
        return r31341;
}

double f_id(double x) {
        double r31342 = x;
        double r31343 = exp(r31342);
        double r31344 = -r31342;
        double r31345 = exp(r31344);
        double r31346 = r31343 - r31345;
        double r31347 = r31343 + r31345;
        double r31348 = r31346 / r31347;
        return r31348;
}


double f_of(float x) {
        float r31349 = x;
        float r31350 = tanh(r31349);
        return r31350;
}

double f_od(double x) {
        double r31351 = x;
        double r31352 = tanh(r31351);
        return r31352;
}

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 r31353, r31354, r31355, r31356, r31357, r31358, r31359;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r31353);
        mpfr_init(r31354);
        mpfr_init(r31355);
        mpfr_init(r31356);
        mpfr_init(r31357);
        mpfr_init(r31358);
        mpfr_init(r31359);
}

double f_im(double x) {
        mpfr_set_d(r31353, x, MPFR_RNDN);
        mpfr_exp(r31354, r31353, MPFR_RNDN);
        mpfr_neg(r31355, r31353, MPFR_RNDN);
        mpfr_exp(r31356, r31355, MPFR_RNDN);
        mpfr_sub(r31357, r31354, r31356, MPFR_RNDN);
        mpfr_add(r31358, r31354, r31356, MPFR_RNDN);
        mpfr_div(r31359, r31357, r31358, MPFR_RNDN);
        return mpfr_get_d(r31359, MPFR_RNDN);
}

static mpfr_t r31360, r31361;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r31360);
        mpfr_init(r31361);
}

double f_fm(double x) {
        mpfr_set_d(r31360, x, MPFR_RNDN);
        mpfr_tanh(r31361, r31360, MPFR_RNDN);
        return mpfr_get_d(r31361, MPFR_RNDN);
}

static mpfr_t r31362, r31363;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r31362);
        mpfr_init(r31363);
}

double f_dm(double x) {
        mpfr_set_d(r31362, x, MPFR_RNDN);
        mpfr_tanh(r31363, r31362, MPFR_RNDN);
        return mpfr_get_d(r31363, MPFR_RNDN);
}

