#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 r23458 = 1;
        float r23459 = x;
        float r23460 = cos(r23459);
        float r23461 = r23458 - r23460;
        float r23462 = sin(r23459);
        float r23463 = r23461 / r23462;
        return r23463;
}

double f_id(double x) {
        double r23464 = 1;
        double r23465 = x;
        double r23466 = cos(r23465);
        double r23467 = r23464 - r23466;
        double r23468 = sin(r23465);
        double r23469 = r23467 / r23468;
        return r23469;
}


double f_of(float x) {
        float r23470 = x;
        float r23471 = 2;
        float r23472 = r23470 / r23471;
        float r23473 = tan(r23472);
        return r23473;
}

double f_od(double x) {
        double r23474 = x;
        double r23475 = 2;
        double r23476 = r23474 / r23475;
        double r23477 = tan(r23476);
        return r23477;
}

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 r23478, r23479, r23480, r23481, r23482, r23483;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2640);
        mpfr_init_set_str(r23478, "1", 10, MPFR_RNDN);
        mpfr_init(r23479);
        mpfr_init(r23480);
        mpfr_init(r23481);
        mpfr_init(r23482);
        mpfr_init(r23483);
}

double f_im(double x) {
        ;
        mpfr_set_d(r23479, x, MPFR_RNDN);
        mpfr_cos(r23480, r23479, MPFR_RNDN);
        mpfr_sub(r23481, r23478, r23480, MPFR_RNDN);
        mpfr_sin(r23482, r23479, MPFR_RNDN);
        mpfr_div(r23483, r23481, r23482, MPFR_RNDN);
        return mpfr_get_d(r23483, MPFR_RNDN);
}

static mpfr_t r23484, r23485, r23486, r23487;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2640);
        mpfr_init(r23484);
        mpfr_init_set_str(r23485, "2", 10, MPFR_RNDN);
        mpfr_init(r23486);
        mpfr_init(r23487);
}

double f_fm(double x) {
        mpfr_set_d(r23484, x, MPFR_RNDN);
        ;
        mpfr_div(r23486, r23484, r23485, MPFR_RNDN);
        mpfr_tan(r23487, r23486, MPFR_RNDN);
        return mpfr_get_d(r23487, MPFR_RNDN);
}

static mpfr_t r23488, r23489, r23490, r23491;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2640);
        mpfr_init(r23488);
        mpfr_init_set_str(r23489, "2", 10, MPFR_RNDN);
        mpfr_init(r23490);
        mpfr_init(r23491);
}

double f_dm(double x) {
        mpfr_set_d(r23488, x, MPFR_RNDN);
        ;
        mpfr_div(r23490, r23488, r23489, MPFR_RNDN);
        mpfr_tan(r23491, r23490, MPFR_RNDN);
        return mpfr_get_d(r23491, MPFR_RNDN);
}

