#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 r31321 = 1;
        float r31322 = x;
        float r31323 = r31321 / r31322;
        float r31324 = r31322 * r31322;
        float r31325 = r31321 - r31324;
        float r31326 = sqrt(r31325);
        float r31327 = r31326 / r31322;
        float r31328 = r31323 + r31327;
        float r31329 = log(r31328);
        return r31329;
}

double f_id(double x) {
        double r31330 = 1;
        double r31331 = x;
        double r31332 = r31330 / r31331;
        double r31333 = r31331 * r31331;
        double r31334 = r31330 - r31333;
        double r31335 = sqrt(r31334);
        double r31336 = r31335 / r31331;
        double r31337 = r31332 + r31336;
        double r31338 = log(r31337);
        return r31338;
}


double f_of(float x) {
        float r31339 = 1;
        float r31340 = x;
        float r31341 = r31339 / r31340;
        float r31342 = r31340 * r31340;
        float r31343 = r31339 - r31342;
        float r31344 = sqrt(r31343);
        float r31345 = r31344 / r31340;
        float r31346 = r31341 + r31345;
        float r31347 = log(r31346);
        return r31347;
}

double f_od(double x) {
        double r31348 = 1;
        double r31349 = x;
        double r31350 = r31348 / r31349;
        double r31351 = r31349 * r31349;
        double r31352 = r31348 - r31351;
        double r31353 = sqrt(r31352);
        double r31354 = r31353 / r31349;
        double r31355 = r31350 + r31354;
        double r31356 = log(r31355);
        return r31356;
}

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 r31357, r31358, r31359, r31360, r31361, r31362, r31363, r31364, r31365;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31357, "1", 10, MPFR_RNDN);
        mpfr_init(r31358);
        mpfr_init(r31359);
        mpfr_init(r31360);
        mpfr_init(r31361);
        mpfr_init(r31362);
        mpfr_init(r31363);
        mpfr_init(r31364);
        mpfr_init(r31365);
}

double f_im(double x) {
        ;
        mpfr_set_d(r31358, x, MPFR_RNDN);
        mpfr_div(r31359, r31357, r31358, MPFR_RNDN);
        mpfr_mul(r31360, r31358, r31358, MPFR_RNDN);
        mpfr_sub(r31361, r31357, r31360, MPFR_RNDN);
        mpfr_sqrt(r31362, r31361, MPFR_RNDN);
        mpfr_div(r31363, r31362, r31358, MPFR_RNDN);
        mpfr_add(r31364, r31359, r31363, MPFR_RNDN);
        mpfr_log(r31365, r31364, MPFR_RNDN);
        return mpfr_get_d(r31365, MPFR_RNDN);
}

static mpfr_t r31366, r31367, r31368, r31369, r31370, r31371, r31372, r31373, r31374;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31366, "1", 10, MPFR_RNDN);
        mpfr_init(r31367);
        mpfr_init(r31368);
        mpfr_init(r31369);
        mpfr_init(r31370);
        mpfr_init(r31371);
        mpfr_init(r31372);
        mpfr_init(r31373);
        mpfr_init(r31374);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31367, x, MPFR_RNDN);
        mpfr_div(r31368, r31366, r31367, MPFR_RNDN);
        mpfr_mul(r31369, r31367, r31367, MPFR_RNDN);
        mpfr_sub(r31370, r31366, r31369, MPFR_RNDN);
        mpfr_sqrt(r31371, r31370, MPFR_RNDN);
        mpfr_div(r31372, r31371, r31367, MPFR_RNDN);
        mpfr_add(r31373, r31368, r31372, MPFR_RNDN);
        mpfr_log(r31374, r31373, MPFR_RNDN);
        return mpfr_get_d(r31374, MPFR_RNDN);
}

static mpfr_t r31375, r31376, r31377, r31378, r31379, r31380, r31381, r31382, r31383;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31375, "1", 10, MPFR_RNDN);
        mpfr_init(r31376);
        mpfr_init(r31377);
        mpfr_init(r31378);
        mpfr_init(r31379);
        mpfr_init(r31380);
        mpfr_init(r31381);
        mpfr_init(r31382);
        mpfr_init(r31383);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31376, x, MPFR_RNDN);
        mpfr_div(r31377, r31375, r31376, MPFR_RNDN);
        mpfr_mul(r31378, r31376, r31376, MPFR_RNDN);
        mpfr_sub(r31379, r31375, r31378, MPFR_RNDN);
        mpfr_sqrt(r31380, r31379, MPFR_RNDN);
        mpfr_div(r31381, r31380, r31376, MPFR_RNDN);
        mpfr_add(r31382, r31377, r31381, MPFR_RNDN);
        mpfr_log(r31383, r31382, MPFR_RNDN);
        return mpfr_get_d(r31383, MPFR_RNDN);
}

