#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 r31358 = 1;
        float r31359 = x;
        float r31360 = r31358 / r31359;
        float r31361 = r31359 * r31359;
        float r31362 = r31358 - r31361;
        float r31363 = sqrt(r31362);
        float r31364 = r31363 / r31359;
        float r31365 = r31360 + r31364;
        float r31366 = log(r31365);
        return r31366;
}

double f_id(double x) {
        double r31367 = 1;
        double r31368 = x;
        double r31369 = r31367 / r31368;
        double r31370 = r31368 * r31368;
        double r31371 = r31367 - r31370;
        double r31372 = sqrt(r31371);
        double r31373 = r31372 / r31368;
        double r31374 = r31369 + r31373;
        double r31375 = log(r31374);
        return r31375;
}


double f_of(float x) {
        float r31376 = 1;
        float r31377 = x;
        float r31378 = r31376 / r31377;
        float r31379 = r31377 * r31377;
        float r31380 = r31376 - r31379;
        float r31381 = sqrt(r31380);
        float r31382 = r31381 / r31377;
        float r31383 = r31378 + r31382;
        float r31384 = log(r31383);
        return r31384;
}

double f_od(double x) {
        double r31385 = 1;
        double r31386 = x;
        double r31387 = r31385 / r31386;
        double r31388 = r31386 * r31386;
        double r31389 = r31385 - r31388;
        double r31390 = sqrt(r31389);
        double r31391 = r31390 / r31386;
        double r31392 = r31387 + r31391;
        double r31393 = log(r31392);
        return r31393;
}

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 r31394, r31395, r31396, r31397, r31398, r31399, r31400, r31401, r31402;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31394, "1", 10, MPFR_RNDN);
        mpfr_init(r31395);
        mpfr_init(r31396);
        mpfr_init(r31397);
        mpfr_init(r31398);
        mpfr_init(r31399);
        mpfr_init(r31400);
        mpfr_init(r31401);
        mpfr_init(r31402);
}

double f_im(double x) {
        ;
        mpfr_set_d(r31395, x, MPFR_RNDN);
        mpfr_div(r31396, r31394, r31395, MPFR_RNDN);
        mpfr_mul(r31397, r31395, r31395, MPFR_RNDN);
        mpfr_sub(r31398, r31394, r31397, MPFR_RNDN);
        mpfr_sqrt(r31399, r31398, MPFR_RNDN);
        mpfr_div(r31400, r31399, r31395, MPFR_RNDN);
        mpfr_add(r31401, r31396, r31400, MPFR_RNDN);
        mpfr_log(r31402, r31401, MPFR_RNDN);
        return mpfr_get_d(r31402, MPFR_RNDN);
}

static mpfr_t r31403, r31404, r31405, r31406, r31407, r31408, r31409, r31410, r31411;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31403, "1", 10, MPFR_RNDN);
        mpfr_init(r31404);
        mpfr_init(r31405);
        mpfr_init(r31406);
        mpfr_init(r31407);
        mpfr_init(r31408);
        mpfr_init(r31409);
        mpfr_init(r31410);
        mpfr_init(r31411);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31404, x, MPFR_RNDN);
        mpfr_div(r31405, r31403, r31404, MPFR_RNDN);
        mpfr_mul(r31406, r31404, r31404, MPFR_RNDN);
        mpfr_sub(r31407, r31403, r31406, MPFR_RNDN);
        mpfr_sqrt(r31408, r31407, MPFR_RNDN);
        mpfr_div(r31409, r31408, r31404, MPFR_RNDN);
        mpfr_add(r31410, r31405, r31409, MPFR_RNDN);
        mpfr_log(r31411, r31410, MPFR_RNDN);
        return mpfr_get_d(r31411, MPFR_RNDN);
}

static mpfr_t r31412, r31413, r31414, r31415, r31416, r31417, r31418, r31419, r31420;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31412, "1", 10, MPFR_RNDN);
        mpfr_init(r31413);
        mpfr_init(r31414);
        mpfr_init(r31415);
        mpfr_init(r31416);
        mpfr_init(r31417);
        mpfr_init(r31418);
        mpfr_init(r31419);
        mpfr_init(r31420);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31413, x, MPFR_RNDN);
        mpfr_div(r31414, r31412, r31413, MPFR_RNDN);
        mpfr_mul(r31415, r31413, r31413, MPFR_RNDN);
        mpfr_sub(r31416, r31412, r31415, MPFR_RNDN);
        mpfr_sqrt(r31417, r31416, MPFR_RNDN);
        mpfr_div(r31418, r31417, r31413, MPFR_RNDN);
        mpfr_add(r31419, r31414, r31418, MPFR_RNDN);
        mpfr_log(r31420, r31419, MPFR_RNDN);
        return mpfr_get_d(r31420, MPFR_RNDN);
}

