#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 r8834 = 1.0f;
        float r8835 = x;
        float r8836 = r8834 / r8835;
        float r8837 = r8835 * r8835;
        float r8838 = r8834 - r8837;
        float r8839 = sqrt(r8838);
        float r8840 = r8839 / r8835;
        float r8841 = r8836 + r8840;
        float r8842 = log(r8841);
        return r8842;
}

double f_id(double x) {
        double r8843 = 1.0;
        double r8844 = x;
        double r8845 = r8843 / r8844;
        double r8846 = r8844 * r8844;
        double r8847 = r8843 - r8846;
        double r8848 = sqrt(r8847);
        double r8849 = r8848 / r8844;
        double r8850 = r8845 + r8849;
        double r8851 = log(r8850);
        return r8851;
}


double f_of(float x) {
        float r8852 = 1.0f;
        float r8853 = x;
        float r8854 = r8852 / r8853;
        float r8855 = r8853 * r8853;
        float r8856 = r8852 - r8855;
        float r8857 = sqrt(r8856);
        float r8858 = r8857 / r8853;
        float r8859 = r8854 + r8858;
        float r8860 = log(r8859);
        return r8860;
}

double f_od(double x) {
        double r8861 = 1.0;
        double r8862 = x;
        double r8863 = r8861 / r8862;
        double r8864 = r8862 * r8862;
        double r8865 = r8861 - r8864;
        double r8866 = sqrt(r8865);
        double r8867 = r8866 / r8862;
        double r8868 = r8863 + r8867;
        double r8869 = log(r8868);
        return r8869;
}

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 r8870, r8871, r8872, r8873, r8874, r8875, r8876, r8877, r8878;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8870, "1", 10, MPFR_RNDN);
        mpfr_init(r8871);
        mpfr_init(r8872);
        mpfr_init(r8873);
        mpfr_init(r8874);
        mpfr_init(r8875);
        mpfr_init(r8876);
        mpfr_init(r8877);
        mpfr_init(r8878);
}

double f_im(double x) {
        ;
        mpfr_set_d(r8871, x, MPFR_RNDN);
        mpfr_div(r8872, r8870, r8871, MPFR_RNDN);
        mpfr_mul(r8873, r8871, r8871, MPFR_RNDN);
        mpfr_sub(r8874, r8870, r8873, MPFR_RNDN);
        mpfr_sqrt(r8875, r8874, MPFR_RNDN);
        mpfr_div(r8876, r8875, r8871, MPFR_RNDN);
        mpfr_add(r8877, r8872, r8876, MPFR_RNDN);
        mpfr_log(r8878, r8877, MPFR_RNDN);
        return mpfr_get_d(r8878, MPFR_RNDN);
}

static mpfr_t r8879, r8880, r8881, r8882, r8883, r8884, r8885, r8886, r8887;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8879, "1", 10, MPFR_RNDN);
        mpfr_init(r8880);
        mpfr_init(r8881);
        mpfr_init(r8882);
        mpfr_init(r8883);
        mpfr_init(r8884);
        mpfr_init(r8885);
        mpfr_init(r8886);
        mpfr_init(r8887);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r8880, x, MPFR_RNDN);
        mpfr_div(r8881, r8879, r8880, MPFR_RNDN);
        mpfr_mul(r8882, r8880, r8880, MPFR_RNDN);
        mpfr_sub(r8883, r8879, r8882, MPFR_RNDN);
        mpfr_sqrt(r8884, r8883, MPFR_RNDN);
        mpfr_div(r8885, r8884, r8880, MPFR_RNDN);
        mpfr_add(r8886, r8881, r8885, MPFR_RNDN);
        mpfr_log(r8887, r8886, MPFR_RNDN);
        return mpfr_get_d(r8887, MPFR_RNDN);
}

static mpfr_t r8888, r8889, r8890, r8891, r8892, r8893, r8894, r8895, r8896;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8888, "1", 10, MPFR_RNDN);
        mpfr_init(r8889);
        mpfr_init(r8890);
        mpfr_init(r8891);
        mpfr_init(r8892);
        mpfr_init(r8893);
        mpfr_init(r8894);
        mpfr_init(r8895);
        mpfr_init(r8896);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r8889, x, MPFR_RNDN);
        mpfr_div(r8890, r8888, r8889, MPFR_RNDN);
        mpfr_mul(r8891, r8889, r8889, MPFR_RNDN);
        mpfr_sub(r8892, r8888, r8891, MPFR_RNDN);
        mpfr_sqrt(r8893, r8892, MPFR_RNDN);
        mpfr_div(r8894, r8893, r8889, MPFR_RNDN);
        mpfr_add(r8895, r8890, r8894, MPFR_RNDN);
        mpfr_log(r8896, r8895, MPFR_RNDN);
        return mpfr_get_d(r8896, MPFR_RNDN);
}

