#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 r31571 = 1;
        float r31572 = 2;
        float r31573 = r31571 / r31572;
        float r31574 = x;
        float r31575 = r31571 + r31574;
        float r31576 = r31571 - r31574;
        float r31577 = r31575 / r31576;
        float r31578 = log(r31577);
        float r31579 = r31573 * r31578;
        return r31579;
}

double f_id(double x) {
        double r31580 = 1;
        double r31581 = 2;
        double r31582 = r31580 / r31581;
        double r31583 = x;
        double r31584 = r31580 + r31583;
        double r31585 = r31580 - r31583;
        double r31586 = r31584 / r31585;
        double r31587 = log(r31586);
        double r31588 = r31582 * r31587;
        return r31588;
}


double f_of(float x) {
        float r31589 = 2/3;
        float r31590 = x;
        float r31591 = 3;
        float r31592 = pow(r31590, r31591);
        float r31593 = r31589 * r31592;
        float r31594 = 2/5;
        float r31595 = 5;
        float r31596 = pow(r31590, r31595);
        float r31597 = r31594 * r31596;
        float r31598 = 2;
        float r31599 = r31598 * r31590;
        float r31600 = r31597 + r31599;
        float r31601 = r31593 + r31600;
        float r31602 = r31601 / r31598;
        return r31602;
}

double f_od(double x) {
        double r31603 = 2/3;
        double r31604 = x;
        double r31605 = 3;
        double r31606 = pow(r31604, r31605);
        double r31607 = r31603 * r31606;
        double r31608 = 2/5;
        double r31609 = 5;
        double r31610 = pow(r31604, r31609);
        double r31611 = r31608 * r31610;
        double r31612 = 2;
        double r31613 = r31612 * r31604;
        double r31614 = r31611 + r31613;
        double r31615 = r31607 + r31614;
        double r31616 = r31615 / r31612;
        return r31616;
}

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 r31617, r31618, r31619, r31620, r31621, r31622, r31623, r31624, r31625;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r31617, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r31618, "2", 10, MPFR_RNDN);
        mpfr_init(r31619);
        mpfr_init(r31620);
        mpfr_init(r31621);
        mpfr_init(r31622);
        mpfr_init(r31623);
        mpfr_init(r31624);
        mpfr_init(r31625);
}

double f_im(double x) {
        ;
        ;
        mpfr_div(r31619, r31617, r31618, MPFR_RNDN);
        mpfr_set_d(r31620, x, MPFR_RNDN);
        mpfr_add(r31621, r31617, r31620, MPFR_RNDN);
        mpfr_sub(r31622, r31617, r31620, MPFR_RNDN);
        mpfr_div(r31623, r31621, r31622, MPFR_RNDN);
        mpfr_log(r31624, r31623, MPFR_RNDN);
        mpfr_mul(r31625, r31619, r31624, MPFR_RNDN);
        return mpfr_get_d(r31625, MPFR_RNDN);
}

static mpfr_t r31626, r31627, r31628, r31629, r31630, r31631, r31632, r31633, r31634, r31635, r31636, r31637, r31638, r31639;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r31626, "2/3", 10, MPFR_RNDN);
        mpfr_init(r31627);
        mpfr_init_set_str(r31628, "3", 10, MPFR_RNDN);
        mpfr_init(r31629);
        mpfr_init(r31630);
        mpfr_init_set_str(r31631, "2/5", 10, MPFR_RNDN);
        mpfr_init_set_str(r31632, "5", 10, MPFR_RNDN);
        mpfr_init(r31633);
        mpfr_init(r31634);
        mpfr_init_set_str(r31635, "2", 10, MPFR_RNDN);
        mpfr_init(r31636);
        mpfr_init(r31637);
        mpfr_init(r31638);
        mpfr_init(r31639);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31627, x, MPFR_RNDN);
        ;
        mpfr_pow(r31629, r31627, r31628, MPFR_RNDN);
        mpfr_mul(r31630, r31626, r31629, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r31633, r31627, r31632, MPFR_RNDN);
        mpfr_mul(r31634, r31631, r31633, MPFR_RNDN);
        ;
        mpfr_mul(r31636, r31635, r31627, MPFR_RNDN);
        mpfr_add(r31637, r31634, r31636, MPFR_RNDN);
        mpfr_add(r31638, r31630, r31637, MPFR_RNDN);
        mpfr_div(r31639, r31638, r31635, MPFR_RNDN);
        return mpfr_get_d(r31639, MPFR_RNDN);
}

static mpfr_t r31640, r31641, r31642, r31643, r31644, r31645, r31646, r31647, r31648, r31649, r31650, r31651, r31652, r31653;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r31640, "2/3", 10, MPFR_RNDN);
        mpfr_init(r31641);
        mpfr_init_set_str(r31642, "3", 10, MPFR_RNDN);
        mpfr_init(r31643);
        mpfr_init(r31644);
        mpfr_init_set_str(r31645, "2/5", 10, MPFR_RNDN);
        mpfr_init_set_str(r31646, "5", 10, MPFR_RNDN);
        mpfr_init(r31647);
        mpfr_init(r31648);
        mpfr_init_set_str(r31649, "2", 10, MPFR_RNDN);
        mpfr_init(r31650);
        mpfr_init(r31651);
        mpfr_init(r31652);
        mpfr_init(r31653);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31641, x, MPFR_RNDN);
        ;
        mpfr_pow(r31643, r31641, r31642, MPFR_RNDN);
        mpfr_mul(r31644, r31640, r31643, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r31647, r31641, r31646, MPFR_RNDN);
        mpfr_mul(r31648, r31645, r31647, MPFR_RNDN);
        ;
        mpfr_mul(r31650, r31649, r31641, MPFR_RNDN);
        mpfr_add(r31651, r31648, r31650, MPFR_RNDN);
        mpfr_add(r31652, r31644, r31651, MPFR_RNDN);
        mpfr_div(r31653, r31652, r31649, MPFR_RNDN);
        return mpfr_get_d(r31653, MPFR_RNDN);
}

