#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 r31638 = 1;
        float r31639 = x;
        float r31640 = r31638 / r31639;
        float r31641 = r31639 * r31639;
        float r31642 = r31638 - r31641;
        float r31643 = sqrt(r31642);
        float r31644 = r31643 / r31639;
        float r31645 = r31640 + r31644;
        float r31646 = log(r31645);
        return r31646;
}

double f_id(double x) {
        double r31647 = 1;
        double r31648 = x;
        double r31649 = r31647 / r31648;
        double r31650 = r31648 * r31648;
        double r31651 = r31647 - r31650;
        double r31652 = sqrt(r31651);
        double r31653 = r31652 / r31648;
        double r31654 = r31649 + r31653;
        double r31655 = log(r31654);
        return r31655;
}


double f_of(float x) {
        float r31656 = 1;
        float r31657 = x;
        float r31658 = r31656 / r31657;
        float r31659 = r31657 * r31657;
        float r31660 = r31656 - r31659;
        float r31661 = sqrt(r31660);
        float r31662 = r31661 / r31657;
        float r31663 = r31658 + r31662;
        float r31664 = log(r31663);
        return r31664;
}

double f_od(double x) {
        double r31665 = 1;
        double r31666 = x;
        double r31667 = r31665 / r31666;
        double r31668 = r31666 * r31666;
        double r31669 = r31665 - r31668;
        double r31670 = sqrt(r31669);
        double r31671 = r31670 / r31666;
        double r31672 = r31667 + r31671;
        double r31673 = log(r31672);
        return r31673;
}

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 r31674, r31675, r31676, r31677, r31678, r31679, r31680, r31681, r31682;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31674, "1", 10, MPFR_RNDN);
        mpfr_init(r31675);
        mpfr_init(r31676);
        mpfr_init(r31677);
        mpfr_init(r31678);
        mpfr_init(r31679);
        mpfr_init(r31680);
        mpfr_init(r31681);
        mpfr_init(r31682);
}

double f_im(double x) {
        ;
        mpfr_set_d(r31675, x, MPFR_RNDN);
        mpfr_div(r31676, r31674, r31675, MPFR_RNDN);
        mpfr_mul(r31677, r31675, r31675, MPFR_RNDN);
        mpfr_sub(r31678, r31674, r31677, MPFR_RNDN);
        mpfr_sqrt(r31679, r31678, MPFR_RNDN);
        mpfr_div(r31680, r31679, r31675, MPFR_RNDN);
        mpfr_add(r31681, r31676, r31680, MPFR_RNDN);
        mpfr_log(r31682, r31681, MPFR_RNDN);
        return mpfr_get_d(r31682, MPFR_RNDN);
}

static mpfr_t r31683, r31684, r31685, r31686, r31687, r31688, r31689, r31690, r31691;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31683, "1", 10, MPFR_RNDN);
        mpfr_init(r31684);
        mpfr_init(r31685);
        mpfr_init(r31686);
        mpfr_init(r31687);
        mpfr_init(r31688);
        mpfr_init(r31689);
        mpfr_init(r31690);
        mpfr_init(r31691);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31684, x, MPFR_RNDN);
        mpfr_div(r31685, r31683, r31684, MPFR_RNDN);
        mpfr_mul(r31686, r31684, r31684, MPFR_RNDN);
        mpfr_sub(r31687, r31683, r31686, MPFR_RNDN);
        mpfr_sqrt(r31688, r31687, MPFR_RNDN);
        mpfr_div(r31689, r31688, r31684, MPFR_RNDN);
        mpfr_add(r31690, r31685, r31689, MPFR_RNDN);
        mpfr_log(r31691, r31690, MPFR_RNDN);
        return mpfr_get_d(r31691, MPFR_RNDN);
}

static mpfr_t r31692, r31693, r31694, r31695, r31696, r31697, r31698, r31699, r31700;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31692, "1", 10, MPFR_RNDN);
        mpfr_init(r31693);
        mpfr_init(r31694);
        mpfr_init(r31695);
        mpfr_init(r31696);
        mpfr_init(r31697);
        mpfr_init(r31698);
        mpfr_init(r31699);
        mpfr_init(r31700);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31693, x, MPFR_RNDN);
        mpfr_div(r31694, r31692, r31693, MPFR_RNDN);
        mpfr_mul(r31695, r31693, r31693, MPFR_RNDN);
        mpfr_sub(r31696, r31692, r31695, MPFR_RNDN);
        mpfr_sqrt(r31697, r31696, MPFR_RNDN);
        mpfr_div(r31698, r31697, r31693, MPFR_RNDN);
        mpfr_add(r31699, r31694, r31698, MPFR_RNDN);
        mpfr_log(r31700, r31699, MPFR_RNDN);
        return mpfr_get_d(r31700, MPFR_RNDN);
}

