#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 r8877 = 1.0f;
        float r8878 = 2.0f;
        float r8879 = r8877 / r8878;
        float r8880 = x;
        float r8881 = r8877 + r8880;
        float r8882 = r8877 - r8880;
        float r8883 = r8881 / r8882;
        float r8884 = log(r8883);
        float r8885 = r8879 * r8884;
        return r8885;
}

double f_id(double x) {
        double r8886 = 1.0;
        double r8887 = 2.0;
        double r8888 = r8886 / r8887;
        double r8889 = x;
        double r8890 = r8886 + r8889;
        double r8891 = r8886 - r8889;
        double r8892 = r8890 / r8891;
        double r8893 = log(r8892);
        double r8894 = r8888 * r8893;
        return r8894;
}


double f_of(float x) {
        float r8895 = 1.0f;
        float r8896 = 2.0f;
        float r8897 = r8895 / r8896;
        float r8898 = -r8897;
        float r8899 = x;
        float r8900 = -r8899;
        float r8901 = log1p(r8900);
        float r8902 = log1p(r8899);
        float r8903 = r8902 / r8896;
        float r8904 = fma(r8898, r8901, r8903);
        return r8904;
}

double f_od(double x) {
        double r8905 = 1.0;
        double r8906 = 2.0;
        double r8907 = r8905 / r8906;
        double r8908 = -r8907;
        double r8909 = x;
        double r8910 = -r8909;
        double r8911 = log1p(r8910);
        double r8912 = log1p(r8909);
        double r8913 = r8912 / r8906;
        double r8914 = fma(r8908, r8911, r8913);
        return r8914;
}

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 r8915, r8916, r8917, r8918, r8919, r8920, r8921, r8922, r8923;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8915, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8916, "2", 10, MPFR_RNDN);
        mpfr_init(r8917);
        mpfr_init(r8918);
        mpfr_init(r8919);
        mpfr_init(r8920);
        mpfr_init(r8921);
        mpfr_init(r8922);
        mpfr_init(r8923);
}

double f_im(double x) {
        ;
        ;
        mpfr_div(r8917, r8915, r8916, MPFR_RNDN);
        mpfr_set_d(r8918, x, MPFR_RNDN);
        mpfr_add(r8919, r8915, r8918, MPFR_RNDN);
        mpfr_sub(r8920, r8915, r8918, MPFR_RNDN);
        mpfr_div(r8921, r8919, r8920, MPFR_RNDN);
        mpfr_log(r8922, r8921, MPFR_RNDN);
        mpfr_mul(r8923, r8917, r8922, MPFR_RNDN);
        return mpfr_get_d(r8923, MPFR_RNDN);
}

static mpfr_t r8924, r8925, r8926, r8927, r8928, r8929, r8930, r8931, r8932, r8933;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8924, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8925, "2", 10, MPFR_RNDN);
        mpfr_init(r8926);
        mpfr_init(r8927);
        mpfr_init(r8928);
        mpfr_init(r8929);
        mpfr_init(r8930);
        mpfr_init(r8931);
        mpfr_init(r8932);
        mpfr_init(r8933);
}

double f_fm(double x) {
        ;
        ;
        mpfr_div(r8926, r8924, r8925, MPFR_RNDN);
        mpfr_neg(r8927, r8926, MPFR_RNDN);
        mpfr_set_d(r8928, x, MPFR_RNDN);
        mpfr_neg(r8929, r8928, MPFR_RNDN);
        mpfr_log1p(r8930, r8929, MPFR_RNDN);
        mpfr_log1p(r8931, r8928, MPFR_RNDN);
        mpfr_div(r8932, r8931, r8925, MPFR_RNDN);
        mpfr_fma(r8933, r8927, r8930, r8932, MPFR_RNDN);
        return mpfr_get_d(r8933, MPFR_RNDN);
}

static mpfr_t r8934, r8935, r8936, r8937, r8938, r8939, r8940, r8941, r8942, r8943;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8934, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8935, "2", 10, MPFR_RNDN);
        mpfr_init(r8936);
        mpfr_init(r8937);
        mpfr_init(r8938);
        mpfr_init(r8939);
        mpfr_init(r8940);
        mpfr_init(r8941);
        mpfr_init(r8942);
        mpfr_init(r8943);
}

double f_dm(double x) {
        ;
        ;
        mpfr_div(r8936, r8934, r8935, MPFR_RNDN);
        mpfr_neg(r8937, r8936, MPFR_RNDN);
        mpfr_set_d(r8938, x, MPFR_RNDN);
        mpfr_neg(r8939, r8938, MPFR_RNDN);
        mpfr_log1p(r8940, r8939, MPFR_RNDN);
        mpfr_log1p(r8941, r8938, MPFR_RNDN);
        mpfr_div(r8942, r8941, r8935, MPFR_RNDN);
        mpfr_fma(r8943, r8937, r8940, r8942, MPFR_RNDN);
        return mpfr_get_d(r8943, MPFR_RNDN);
}

