#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 r8566 = x;
        float r8567 = exp(r8566);
        float r8568 = -r8566;
        float r8569 = exp(r8568);
        float r8570 = r8567 - r8569;
        float r8571 = r8567 + r8569;
        float r8572 = r8570 / r8571;
        return r8572;
}

double f_id(double x) {
        double r8573 = x;
        double r8574 = exp(r8573);
        double r8575 = -r8573;
        double r8576 = exp(r8575);
        double r8577 = r8574 - r8576;
        double r8578 = r8574 + r8576;
        double r8579 = r8577 / r8578;
        return r8579;
}


double f_of(float x) {
        float r8580 = x;
        float r8581 = tanh(r8580);
        return r8581;
}

double f_od(double x) {
        double r8582 = x;
        double r8583 = tanh(r8582);
        return r8583;
}

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 r8584, r8585, r8586, r8587, r8588, r8589, r8590;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8584);
        mpfr_init(r8585);
        mpfr_init(r8586);
        mpfr_init(r8587);
        mpfr_init(r8588);
        mpfr_init(r8589);
        mpfr_init(r8590);
}

double f_im(double x) {
        mpfr_set_d(r8584, x, MPFR_RNDN);
        mpfr_exp(r8585, r8584, MPFR_RNDN);
        mpfr_neg(r8586, r8584, MPFR_RNDN);
        mpfr_exp(r8587, r8586, MPFR_RNDN);
        mpfr_sub(r8588, r8585, r8587, MPFR_RNDN);
        mpfr_add(r8589, r8585, r8587, MPFR_RNDN);
        mpfr_div(r8590, r8588, r8589, MPFR_RNDN);
        return mpfr_get_d(r8590, MPFR_RNDN);
}

static mpfr_t r8591, r8592;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8591);
        mpfr_init(r8592);
}

double f_fm(double x) {
        mpfr_set_d(r8591, x, MPFR_RNDN);
        mpfr_tanh(r8592, r8591, MPFR_RNDN);
        return mpfr_get_d(r8592, MPFR_RNDN);
}

static mpfr_t r8593, r8594;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r8593);
        mpfr_init(r8594);
}

double f_dm(double x) {
        mpfr_set_d(r8593, x, MPFR_RNDN);
        mpfr_tanh(r8594, r8593, MPFR_RNDN);
        return mpfr_get_d(r8594, MPFR_RNDN);
}

