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

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

double f_if(float x) {
        float r31049 = 1;
        float r31050 = x;
        float r31051 = r31049 / r31050;
        float r31052 = r31050 * r31050;
        float r31053 = r31049 - r31052;
        float r31054 = sqrt(r31053);
        float r31055 = r31054 / r31050;
        float r31056 = r31051 + r31055;
        float r31057 = log(r31056);
        return r31057;
}

double f_id(double x) {
        double r31058 = 1;
        double r31059 = x;
        double r31060 = r31058 / r31059;
        double r31061 = r31059 * r31059;
        double r31062 = r31058 - r31061;
        double r31063 = sqrt(r31062);
        double r31064 = r31063 / r31059;
        double r31065 = r31060 + r31064;
        double r31066 = log(r31065);
        return r31066;
}


double f_of(float x) {
        float r31067 = 1;
        float r31068 = x;
        float r31069 = r31067 / r31068;
        float r31070 = r31068 * r31068;
        float r31071 = r31067 - r31070;
        float r31072 = sqrt(r31071);
        float r31073 = r31072 / r31068;
        float r31074 = r31069 + r31073;
        float r31075 = log(r31074);
        return r31075;
}

double f_od(double x) {
        double r31076 = 1;
        double r31077 = x;
        double r31078 = r31076 / r31077;
        double r31079 = r31077 * r31077;
        double r31080 = r31076 - r31079;
        double r31081 = sqrt(r31080);
        double r31082 = r31081 / r31077;
        double r31083 = r31078 + r31082;
        double r31084 = log(r31083);
        return r31084;
}

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 r31085, r31086, r31087, r31088, r31089, r31090, r31091, r31092, r31093;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31085, "1", 10, MPFR_RNDN);
        mpfr_init(r31086);
        mpfr_init(r31087);
        mpfr_init(r31088);
        mpfr_init(r31089);
        mpfr_init(r31090);
        mpfr_init(r31091);
        mpfr_init(r31092);
        mpfr_init(r31093);
}

double f_im(double x) {
        ;
        mpfr_set_d(r31086, x, MPFR_RNDN);
        mpfr_div(r31087, r31085, r31086, MPFR_RNDN);
        mpfr_mul(r31088, r31086, r31086, MPFR_RNDN);
        mpfr_sub(r31089, r31085, r31088, MPFR_RNDN);
        mpfr_sqrt(r31090, r31089, MPFR_RNDN);
        mpfr_div(r31091, r31090, r31086, MPFR_RNDN);
        mpfr_add(r31092, r31087, r31091, MPFR_RNDN);
        mpfr_log(r31093, r31092, MPFR_RNDN);
        return mpfr_get_d(r31093, MPFR_RNDN);
}

static mpfr_t r31094, r31095, r31096, r31097, r31098, r31099, r31100, r31101, r31102;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31094, "1", 10, MPFR_RNDN);
        mpfr_init(r31095);
        mpfr_init(r31096);
        mpfr_init(r31097);
        mpfr_init(r31098);
        mpfr_init(r31099);
        mpfr_init(r31100);
        mpfr_init(r31101);
        mpfr_init(r31102);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31095, x, MPFR_RNDN);
        mpfr_div(r31096, r31094, r31095, MPFR_RNDN);
        mpfr_mul(r31097, r31095, r31095, MPFR_RNDN);
        mpfr_sub(r31098, r31094, r31097, MPFR_RNDN);
        mpfr_sqrt(r31099, r31098, MPFR_RNDN);
        mpfr_div(r31100, r31099, r31095, MPFR_RNDN);
        mpfr_add(r31101, r31096, r31100, MPFR_RNDN);
        mpfr_log(r31102, r31101, MPFR_RNDN);
        return mpfr_get_d(r31102, MPFR_RNDN);
}

static mpfr_t r31103, r31104, r31105, r31106, r31107, r31108, r31109, r31110, r31111;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31103, "1", 10, MPFR_RNDN);
        mpfr_init(r31104);
        mpfr_init(r31105);
        mpfr_init(r31106);
        mpfr_init(r31107);
        mpfr_init(r31108);
        mpfr_init(r31109);
        mpfr_init(r31110);
        mpfr_init(r31111);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31104, x, MPFR_RNDN);
        mpfr_div(r31105, r31103, r31104, MPFR_RNDN);
        mpfr_mul(r31106, r31104, r31104, MPFR_RNDN);
        mpfr_sub(r31107, r31103, r31106, MPFR_RNDN);
        mpfr_sqrt(r31108, r31107, MPFR_RNDN);
        mpfr_div(r31109, r31108, r31104, MPFR_RNDN);
        mpfr_add(r31110, r31105, r31109, MPFR_RNDN);
        mpfr_log(r31111, r31110, MPFR_RNDN);
        return mpfr_get_d(r31111, MPFR_RNDN);
}

