#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 r4940119 = 1.0f;
        float r4940120 = x;
        float r4940121 = cos(r4940120);
        float r4940122 = r4940119 - r4940121;
        float r4940123 = sin(r4940120);
        float r4940124 = r4940122 / r4940123;
        return r4940124;
}

double f_id(double x) {
        double r4940125 = 1.0;
        double r4940126 = x;
        double r4940127 = cos(r4940126);
        double r4940128 = r4940125 - r4940127;
        double r4940129 = sin(r4940126);
        double r4940130 = r4940128 / r4940129;
        return r4940130;
}


double f_of(float x) {
        float r4940131 = x;
        float r4940132 = sin(r4940131);
        float r4940133 = cos(r4940131);
        float r4940134 = 1.0f;
        float r4940135 = r4940133 + r4940134;
        float r4940136 = r4940132 / r4940135;
        float r4940137 = cbrt(r4940136);
        float r4940138 = r4940137 * (r4940137 * r4940137);
        return r4940138;
}

double f_od(double x) {
        double r4940139 = x;
        double r4940140 = sin(r4940139);
        double r4940141 = cos(r4940139);
        double r4940142 = 1.0;
        double r4940143 = r4940141 + r4940142;
        double r4940144 = r4940140 / r4940143;
        double r4940145 = cbrt(r4940144);
        double r4940146 = r4940145 * (r4940145 * r4940145);
        return r4940146;
}

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 r4940147, r4940148, r4940149, r4940150, r4940151, r4940152;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r4940147, "1", 10, MPFR_RNDN);
        mpfr_init(r4940148);
        mpfr_init(r4940149);
        mpfr_init(r4940150);
        mpfr_init(r4940151);
        mpfr_init(r4940152);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4940148, x, MPFR_RNDN);
        mpfr_cos(r4940149, r4940148, MPFR_RNDN);
        mpfr_sub(r4940150, r4940147, r4940149, MPFR_RNDN);
        mpfr_sin(r4940151, r4940148, MPFR_RNDN);
        mpfr_div(r4940152, r4940150, r4940151, MPFR_RNDN);
        return mpfr_get_d(r4940152, MPFR_RNDN);
}

static mpfr_t r4940153, r4940154, r4940155, r4940156, r4940157, r4940158, r4940159, r4940160;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4940153);
        mpfr_init(r4940154);
        mpfr_init(r4940155);
        mpfr_init_set_str(r4940156, "1", 10, MPFR_RNDN);
        mpfr_init(r4940157);
        mpfr_init(r4940158);
        mpfr_init(r4940159);
        mpfr_init(r4940160);
}

double f_fm(double x) {
        mpfr_set_d(r4940153, x, MPFR_RNDN);
        mpfr_sin(r4940154, r4940153, MPFR_RNDN);
        mpfr_cos(r4940155, r4940153, MPFR_RNDN);
        ;
        mpfr_add(r4940157, r4940155, r4940156, MPFR_RNDN);
        mpfr_div(r4940158, r4940154, r4940157, MPFR_RNDN);
        mpfr_cbrt(r4940159, r4940158, MPFR_RNDN);
        mpfr_mul(r4940160, r4940159, r4940159, MPFR_RNDN); mpfr_mul(r4940160, r4940160, r4940159, MPFR_RNDN);
        return mpfr_get_d(r4940160, MPFR_RNDN);
}

static mpfr_t r4940161, r4940162, r4940163, r4940164, r4940165, r4940166, r4940167, r4940168;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r4940161);
        mpfr_init(r4940162);
        mpfr_init(r4940163);
        mpfr_init_set_str(r4940164, "1", 10, MPFR_RNDN);
        mpfr_init(r4940165);
        mpfr_init(r4940166);
        mpfr_init(r4940167);
        mpfr_init(r4940168);
}

double f_dm(double x) {
        mpfr_set_d(r4940161, x, MPFR_RNDN);
        mpfr_sin(r4940162, r4940161, MPFR_RNDN);
        mpfr_cos(r4940163, r4940161, MPFR_RNDN);
        ;
        mpfr_add(r4940165, r4940163, r4940164, MPFR_RNDN);
        mpfr_div(r4940166, r4940162, r4940165, MPFR_RNDN);
        mpfr_cbrt(r4940167, r4940166, MPFR_RNDN);
        mpfr_mul(r4940168, r4940167, r4940167, MPFR_RNDN); mpfr_mul(r4940168, r4940168, r4940167, MPFR_RNDN);
        return mpfr_get_d(r4940168, MPFR_RNDN);
}

