#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 r31445 = 1;
        float r31446 = x;
        float r31447 = r31445 / r31446;
        float r31448 = r31446 * r31446;
        float r31449 = r31445 - r31448;
        float r31450 = sqrt(r31449);
        float r31451 = r31450 / r31446;
        float r31452 = r31447 + r31451;
        float r31453 = log(r31452);
        return r31453;
}

double f_id(double x) {
        double r31454 = 1;
        double r31455 = x;
        double r31456 = r31454 / r31455;
        double r31457 = r31455 * r31455;
        double r31458 = r31454 - r31457;
        double r31459 = sqrt(r31458);
        double r31460 = r31459 / r31455;
        double r31461 = r31456 + r31460;
        double r31462 = log(r31461);
        return r31462;
}


double f_of(float x) {
        float r31463 = 1;
        float r31464 = x;
        float r31465 = r31463 / r31464;
        float r31466 = r31464 * r31464;
        float r31467 = r31463 - r31466;
        float r31468 = sqrt(r31467);
        float r31469 = r31468 / r31464;
        float r31470 = r31465 + r31469;
        float r31471 = log(r31470);
        return r31471;
}

double f_od(double x) {
        double r31472 = 1;
        double r31473 = x;
        double r31474 = r31472 / r31473;
        double r31475 = r31473 * r31473;
        double r31476 = r31472 - r31475;
        double r31477 = sqrt(r31476);
        double r31478 = r31477 / r31473;
        double r31479 = r31474 + r31478;
        double r31480 = log(r31479);
        return r31480;
}

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 r31481, r31482, r31483, r31484, r31485, r31486, r31487, r31488, r31489;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31481, "1", 10, MPFR_RNDN);
        mpfr_init(r31482);
        mpfr_init(r31483);
        mpfr_init(r31484);
        mpfr_init(r31485);
        mpfr_init(r31486);
        mpfr_init(r31487);
        mpfr_init(r31488);
        mpfr_init(r31489);
}

double f_im(double x) {
        ;
        mpfr_set_d(r31482, x, MPFR_RNDN);
        mpfr_div(r31483, r31481, r31482, MPFR_RNDN);
        mpfr_mul(r31484, r31482, r31482, MPFR_RNDN);
        mpfr_sub(r31485, r31481, r31484, MPFR_RNDN);
        mpfr_sqrt(r31486, r31485, MPFR_RNDN);
        mpfr_div(r31487, r31486, r31482, MPFR_RNDN);
        mpfr_add(r31488, r31483, r31487, MPFR_RNDN);
        mpfr_log(r31489, r31488, MPFR_RNDN);
        return mpfr_get_d(r31489, MPFR_RNDN);
}

static mpfr_t r31490, r31491, r31492, r31493, r31494, r31495, r31496, r31497, r31498;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31490, "1", 10, MPFR_RNDN);
        mpfr_init(r31491);
        mpfr_init(r31492);
        mpfr_init(r31493);
        mpfr_init(r31494);
        mpfr_init(r31495);
        mpfr_init(r31496);
        mpfr_init(r31497);
        mpfr_init(r31498);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31491, x, MPFR_RNDN);
        mpfr_div(r31492, r31490, r31491, MPFR_RNDN);
        mpfr_mul(r31493, r31491, r31491, MPFR_RNDN);
        mpfr_sub(r31494, r31490, r31493, MPFR_RNDN);
        mpfr_sqrt(r31495, r31494, MPFR_RNDN);
        mpfr_div(r31496, r31495, r31491, MPFR_RNDN);
        mpfr_add(r31497, r31492, r31496, MPFR_RNDN);
        mpfr_log(r31498, r31497, MPFR_RNDN);
        return mpfr_get_d(r31498, MPFR_RNDN);
}

static mpfr_t r31499, r31500, r31501, r31502, r31503, r31504, r31505, r31506, r31507;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r31499, "1", 10, MPFR_RNDN);
        mpfr_init(r31500);
        mpfr_init(r31501);
        mpfr_init(r31502);
        mpfr_init(r31503);
        mpfr_init(r31504);
        mpfr_init(r31505);
        mpfr_init(r31506);
        mpfr_init(r31507);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31500, x, MPFR_RNDN);
        mpfr_div(r31501, r31499, r31500, MPFR_RNDN);
        mpfr_mul(r31502, r31500, r31500, MPFR_RNDN);
        mpfr_sub(r31503, r31499, r31502, MPFR_RNDN);
        mpfr_sqrt(r31504, r31503, MPFR_RNDN);
        mpfr_div(r31505, r31504, r31500, MPFR_RNDN);
        mpfr_add(r31506, r31501, r31505, MPFR_RNDN);
        mpfr_log(r31507, r31506, MPFR_RNDN);
        return mpfr_get_d(r31507, MPFR_RNDN);
}

