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

double f_id(double x) {
        double r8846 = 1.0;
        double r8847 = x;
        double r8848 = r8846 / r8847;
        double r8849 = r8847 * r8847;
        double r8850 = r8846 - r8849;
        double r8851 = sqrt(r8850);
        double r8852 = r8851 / r8847;
        double r8853 = r8848 + r8852;
        double r8854 = log(r8853);
        return r8854;
}


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

double f_od(double x) {
        double r8864 = 1.0;
        double r8865 = x;
        double r8866 = r8864 / r8865;
        double r8867 = r8865 * r8865;
        double r8868 = r8864 - r8867;
        double r8869 = sqrt(r8868);
        double r8870 = r8869 / r8865;
        double r8871 = r8866 + r8870;
        double r8872 = log(r8871);
        return r8872;
}

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 r8873, r8874, r8875, r8876, r8877, r8878, r8879, r8880, r8881;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8873, "1", 10, MPFR_RNDN);
        mpfr_init(r8874);
        mpfr_init(r8875);
        mpfr_init(r8876);
        mpfr_init(r8877);
        mpfr_init(r8878);
        mpfr_init(r8879);
        mpfr_init(r8880);
        mpfr_init(r8881);
}

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

static mpfr_t r8882, r8883, r8884, r8885, r8886, r8887, r8888, r8889, r8890;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8882, "1", 10, MPFR_RNDN);
        mpfr_init(r8883);
        mpfr_init(r8884);
        mpfr_init(r8885);
        mpfr_init(r8886);
        mpfr_init(r8887);
        mpfr_init(r8888);
        mpfr_init(r8889);
        mpfr_init(r8890);
}

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

static mpfr_t r8891, r8892, r8893, r8894, r8895, r8896, r8897, r8898, r8899;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8891, "1", 10, MPFR_RNDN);
        mpfr_init(r8892);
        mpfr_init(r8893);
        mpfr_init(r8894);
        mpfr_init(r8895);
        mpfr_init(r8896);
        mpfr_init(r8897);
        mpfr_init(r8898);
        mpfr_init(r8899);
}

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

