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

char *name = "Hyperbolic arc-(co)tangent";

double f_if(float x) {
        float r29291 = 1.0f;
        float r29292 = 2.0f;
        float r29293 = r29291 / r29292;
        float r29294 = x;
        float r29295 = r29291 + r29294;
        float r29296 = r29291 - r29294;
        float r29297 = r29295 / r29296;
        float r29298 = log(r29297);
        float r29299 = r29293 * r29298;
        return r29299;
}

double f_id(double x) {
        double r29300 = 1.0;
        double r29301 = 2.0;
        double r29302 = r29300 / r29301;
        double r29303 = x;
        double r29304 = r29300 + r29303;
        double r29305 = r29300 - r29303;
        double r29306 = r29304 / r29305;
        double r29307 = log(r29306);
        double r29308 = r29302 * r29307;
        return r29308;
}


double f_of(float x) {
        float r29309 = 0.6666666666666666f;
        float r29310 = x;
        float r29311 = r29310 * (r29310 * r29310);
        float r29312 = r29309 * r29311;
        float r29313 = 5.0f;
        float r29314 = pow(r29310, r29313);
        float r29315 = 0.4f;
        float r29316 = r29314 * r29315;
        float r29317 = r29310 + r29310;
        float r29318 = r29316 + r29317;
        float r29319 = r29312 + r29318;
        float r29320 = 2.0f;
        float r29321 = r29319 / r29320;
        return r29321;
}

double f_od(double x) {
        double r29322 = 0.6666666666666666;
        double r29323 = x;
        double r29324 = r29323 * (r29323 * r29323);
        double r29325 = r29322 * r29324;
        double r29326 = 5.0;
        double r29327 = pow(r29323, r29326);
        double r29328 = 0.4;
        double r29329 = r29327 * r29328;
        double r29330 = r29323 + r29323;
        double r29331 = r29329 + r29330;
        double r29332 = r29325 + r29331;
        double r29333 = 2.0;
        double r29334 = r29332 / r29333;
        return r29334;
}

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 r29335, r29336, r29337, r29338, r29339, r29340, r29341, r29342, r29343;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r29335, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r29336, "2", 10, MPFR_RNDN);
        mpfr_init(r29337);
        mpfr_init(r29338);
        mpfr_init(r29339);
        mpfr_init(r29340);
        mpfr_init(r29341);
        mpfr_init(r29342);
        mpfr_init(r29343);
}

double f_im(double x) {
        ;
        ;
        mpfr_div(r29337, r29335, r29336, MPFR_RNDN);
        mpfr_set_d(r29338, x, MPFR_RNDN);
        mpfr_add(r29339, r29335, r29338, MPFR_RNDN);
        mpfr_sub(r29340, r29335, r29338, MPFR_RNDN);
        mpfr_div(r29341, r29339, r29340, MPFR_RNDN);
        mpfr_log(r29342, r29341, MPFR_RNDN);
        mpfr_mul(r29343, r29337, r29342, MPFR_RNDN);
        return mpfr_get_d(r29343, MPFR_RNDN);
}

static mpfr_t r29344, r29345, r29346, r29347, r29348, r29349, r29350, r29351, r29352, r29353, r29354, r29355, r29356;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r29344, "2/3", 10, MPFR_RNDN);
        mpfr_init(r29345);
        mpfr_init(r29346);
        mpfr_init(r29347);
        mpfr_init_set_str(r29348, "5", 10, MPFR_RNDN);
        mpfr_init(r29349);
        mpfr_init_set_str(r29350, "2/5", 10, MPFR_RNDN);
        mpfr_init(r29351);
        mpfr_init(r29352);
        mpfr_init(r29353);
        mpfr_init(r29354);
        mpfr_init_set_str(r29355, "2", 10, MPFR_RNDN);
        mpfr_init(r29356);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r29345, x, MPFR_RNDN);
        mpfr_mul(r29346, r29345, r29345, MPFR_RNDN); mpfr_mul(r29346, r29346, r29345, MPFR_RNDN);
        mpfr_mul(r29347, r29344, r29346, MPFR_RNDN);
        ;
        mpfr_pow(r29349, r29345, r29348, MPFR_RNDN);
        ;
        mpfr_mul(r29351, r29349, r29350, MPFR_RNDN);
        mpfr_add(r29352, r29345, r29345, MPFR_RNDN);
        mpfr_add(r29353, r29351, r29352, MPFR_RNDN);
        mpfr_add(r29354, r29347, r29353, MPFR_RNDN);
        ;
        mpfr_div(r29356, r29354, r29355, MPFR_RNDN);
        return mpfr_get_d(r29356, MPFR_RNDN);
}

static mpfr_t r29357, r29358, r29359, r29360, r29361, r29362, r29363, r29364, r29365, r29366, r29367, r29368, r29369;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r29357, "2/3", 10, MPFR_RNDN);
        mpfr_init(r29358);
        mpfr_init(r29359);
        mpfr_init(r29360);
        mpfr_init_set_str(r29361, "5", 10, MPFR_RNDN);
        mpfr_init(r29362);
        mpfr_init_set_str(r29363, "2/5", 10, MPFR_RNDN);
        mpfr_init(r29364);
        mpfr_init(r29365);
        mpfr_init(r29366);
        mpfr_init(r29367);
        mpfr_init_set_str(r29368, "2", 10, MPFR_RNDN);
        mpfr_init(r29369);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r29358, x, MPFR_RNDN);
        mpfr_mul(r29359, r29358, r29358, MPFR_RNDN); mpfr_mul(r29359, r29359, r29358, MPFR_RNDN);
        mpfr_mul(r29360, r29357, r29359, MPFR_RNDN);
        ;
        mpfr_pow(r29362, r29358, r29361, MPFR_RNDN);
        ;
        mpfr_mul(r29364, r29362, r29363, MPFR_RNDN);
        mpfr_add(r29365, r29358, r29358, MPFR_RNDN);
        mpfr_add(r29366, r29364, r29365, MPFR_RNDN);
        mpfr_add(r29367, r29360, r29366, MPFR_RNDN);
        ;
        mpfr_div(r29369, r29367, r29368, MPFR_RNDN);
        return mpfr_get_d(r29369, MPFR_RNDN);
}

