#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Hyperbolic arc-cosine";

double f_if(float x) {
        float r8792 = x;
        float r8793 = r8792 * r8792;
        float r8794 = 1.0f;
        float r8795 = r8793 - r8794;
        float r8796 = sqrt(r8795);
        float r8797 = r8792 + r8796;
        float r8798 = log(r8797);
        return r8798;
}

double f_id(double x) {
        double r8799 = x;
        double r8800 = r8799 * r8799;
        double r8801 = 1.0;
        double r8802 = r8800 - r8801;
        double r8803 = sqrt(r8802);
        double r8804 = r8799 + r8803;
        double r8805 = log(r8804);
        return r8805;
}


double f_of(float x) {
        float r8806 = x;
        float r8807 = 1.0f;
        float r8808 = r8807 + r8806;
        float r8809 = sqrt(r8808);
        float r8810 = r8806 - r8807;
        float r8811 = sqrt(r8810);
        float r8812 = r8809 * r8811;
        float r8813 = r8806 + r8812;
        float r8814 = log(r8813);
        return r8814;
}

double f_od(double x) {
        double r8815 = x;
        double r8816 = 1.0;
        double r8817 = r8816 + r8815;
        double r8818 = sqrt(r8817);
        double r8819 = r8815 - r8816;
        double r8820 = sqrt(r8819);
        double r8821 = r8818 * r8820;
        double r8822 = r8815 + r8821;
        double r8823 = log(r8822);
        return r8823;
}

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 r8824, r8825, r8826, r8827, r8828, r8829, r8830;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8824);
        mpfr_init(r8825);
        mpfr_init_set_str(r8826, "1", 10, MPFR_RNDN);
        mpfr_init(r8827);
        mpfr_init(r8828);
        mpfr_init(r8829);
        mpfr_init(r8830);
}

double f_im(double x) {
        mpfr_set_d(r8824, x, MPFR_RNDN);
        mpfr_mul(r8825, r8824, r8824, MPFR_RNDN);
        ;
        mpfr_sub(r8827, r8825, r8826, MPFR_RNDN);
        mpfr_sqrt(r8828, r8827, MPFR_RNDN);
        mpfr_add(r8829, r8824, r8828, MPFR_RNDN);
        mpfr_log(r8830, r8829, MPFR_RNDN);
        return mpfr_get_d(r8830, MPFR_RNDN);
}

static mpfr_t r8831, r8832, r8833, r8834, r8835, r8836, r8837, r8838, r8839;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8831);
        mpfr_init_set_str(r8832, "1", 10, MPFR_RNDN);
        mpfr_init(r8833);
        mpfr_init(r8834);
        mpfr_init(r8835);
        mpfr_init(r8836);
        mpfr_init(r8837);
        mpfr_init(r8838);
        mpfr_init(r8839);
}

double f_fm(double x) {
        mpfr_set_d(r8831, x, MPFR_RNDN);
        ;
        mpfr_add(r8833, r8832, r8831, MPFR_RNDN);
        mpfr_sqrt(r8834, r8833, MPFR_RNDN);
        mpfr_sub(r8835, r8831, r8832, MPFR_RNDN);
        mpfr_sqrt(r8836, r8835, MPFR_RNDN);
        mpfr_mul(r8837, r8834, r8836, MPFR_RNDN);
        mpfr_add(r8838, r8831, r8837, MPFR_RNDN);
        mpfr_log(r8839, r8838, MPFR_RNDN);
        return mpfr_get_d(r8839, MPFR_RNDN);
}

static mpfr_t r8840, r8841, r8842, r8843, r8844, r8845, r8846, r8847, r8848;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r8840);
        mpfr_init_set_str(r8841, "1", 10, MPFR_RNDN);
        mpfr_init(r8842);
        mpfr_init(r8843);
        mpfr_init(r8844);
        mpfr_init(r8845);
        mpfr_init(r8846);
        mpfr_init(r8847);
        mpfr_init(r8848);
}

double f_dm(double x) {
        mpfr_set_d(r8840, x, MPFR_RNDN);
        ;
        mpfr_add(r8842, r8841, r8840, MPFR_RNDN);
        mpfr_sqrt(r8843, r8842, MPFR_RNDN);
        mpfr_sub(r8844, r8840, r8841, MPFR_RNDN);
        mpfr_sqrt(r8845, r8844, MPFR_RNDN);
        mpfr_mul(r8846, r8843, r8845, MPFR_RNDN);
        mpfr_add(r8847, r8840, r8846, MPFR_RNDN);
        mpfr_log(r8848, r8847, MPFR_RNDN);
        return mpfr_get_d(r8848, MPFR_RNDN);
}

