#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 r29230 = x;
        float r29231 = r29230 * r29230;
        float r29232 = 1.0f;
        float r29233 = r29231 - r29232;
        float r29234 = sqrt(r29233);
        float r29235 = r29230 + r29234;
        float r29236 = log(r29235);
        return r29236;
}

double f_id(double x) {
        double r29237 = x;
        double r29238 = r29237 * r29237;
        double r29239 = 1.0;
        double r29240 = r29238 - r29239;
        double r29241 = sqrt(r29240);
        double r29242 = r29237 + r29241;
        double r29243 = log(r29242);
        return r29243;
}


double f_of(float x) {
        float r29244 = x;
        float r29245 = r29244 + r29244;
        float r29246 = 0.5f;
        float r29247 = r29246 / r29244;
        float r29248 = r29245 - r29247;
        float r29249 = 0.125f;
        float r29250 = r29244 * (r29244 * r29244);
        float r29251 = r29249 / r29250;
        float r29252 = r29248 - r29251;
        float r29253 = log(r29252);
        return r29253;
}

double f_od(double x) {
        double r29254 = x;
        double r29255 = r29254 + r29254;
        double r29256 = 0.5;
        double r29257 = r29256 / r29254;
        double r29258 = r29255 - r29257;
        double r29259 = 0.125;
        double r29260 = r29254 * (r29254 * r29254);
        double r29261 = r29259 / r29260;
        double r29262 = r29258 - r29261;
        double r29263 = log(r29262);
        return r29263;
}

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 r29264, r29265, r29266, r29267, r29268, r29269, r29270;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r29264);
        mpfr_init(r29265);
        mpfr_init_set_str(r29266, "1", 10, MPFR_RNDN);
        mpfr_init(r29267);
        mpfr_init(r29268);
        mpfr_init(r29269);
        mpfr_init(r29270);
}

double f_im(double x) {
        mpfr_set_d(r29264, x, MPFR_RNDN);
        mpfr_sqr(r29265, r29264, MPFR_RNDN);
        ;
        mpfr_sub(r29267, r29265, r29266, MPFR_RNDN);
        mpfr_sqrt(r29268, r29267, MPFR_RNDN);
        mpfr_add(r29269, r29264, r29268, MPFR_RNDN);
        mpfr_log(r29270, r29269, MPFR_RNDN);
        return mpfr_get_d(r29270, MPFR_RNDN);
}

static mpfr_t r29271, r29272, r29273, r29274, r29275, r29276, r29277, r29278, r29279, r29280;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r29271);
        mpfr_init(r29272);
        mpfr_init_set_str(r29273, "1/2", 10, MPFR_RNDN);
        mpfr_init(r29274);
        mpfr_init(r29275);
        mpfr_init_set_str(r29276, "1/8", 10, MPFR_RNDN);
        mpfr_init(r29277);
        mpfr_init(r29278);
        mpfr_init(r29279);
        mpfr_init(r29280);
}

double f_fm(double x) {
        mpfr_set_d(r29271, x, MPFR_RNDN);
        mpfr_add(r29272, r29271, r29271, MPFR_RNDN);
        ;
        mpfr_div(r29274, r29273, r29271, MPFR_RNDN);
        mpfr_sub(r29275, r29272, r29274, MPFR_RNDN);
        ;
        mpfr_mul(r29277, r29271, r29271, MPFR_RNDN); mpfr_mul(r29277, r29277, r29271, MPFR_RNDN);
        mpfr_div(r29278, r29276, r29277, MPFR_RNDN);
        mpfr_sub(r29279, r29275, r29278, MPFR_RNDN);
        mpfr_log(r29280, r29279, MPFR_RNDN);
        return mpfr_get_d(r29280, MPFR_RNDN);
}

static mpfr_t r29281, r29282, r29283, r29284, r29285, r29286, r29287, r29288, r29289, r29290;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r29281);
        mpfr_init(r29282);
        mpfr_init_set_str(r29283, "1/2", 10, MPFR_RNDN);
        mpfr_init(r29284);
        mpfr_init(r29285);
        mpfr_init_set_str(r29286, "1/8", 10, MPFR_RNDN);
        mpfr_init(r29287);
        mpfr_init(r29288);
        mpfr_init(r29289);
        mpfr_init(r29290);
}

double f_dm(double x) {
        mpfr_set_d(r29281, x, MPFR_RNDN);
        mpfr_add(r29282, r29281, r29281, MPFR_RNDN);
        ;
        mpfr_div(r29284, r29283, r29281, MPFR_RNDN);
        mpfr_sub(r29285, r29282, r29284, MPFR_RNDN);
        ;
        mpfr_mul(r29287, r29281, r29281, MPFR_RNDN); mpfr_mul(r29287, r29287, r29281, MPFR_RNDN);
        mpfr_div(r29288, r29286, r29287, MPFR_RNDN);
        mpfr_sub(r29289, r29285, r29288, MPFR_RNDN);
        mpfr_log(r29290, r29289, MPFR_RNDN);
        return mpfr_get_d(r29290, MPFR_RNDN);
}

