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

char *name = "Hyperbolic arcsine";

double f_if(float x) {
        float r45695 = x;
        float r45696 = r45695 * r45695;
        float r45697 = 1.0f;
        float r45698 = r45696 + r45697;
        float r45699 = sqrt(r45698);
        float r45700 = r45695 + r45699;
        float r45701 = log(r45700);
        return r45701;
}

double f_id(double x) {
        double r45702 = x;
        double r45703 = r45702 * r45702;
        double r45704 = 1.0;
        double r45705 = r45703 + r45704;
        double r45706 = sqrt(r45705);
        double r45707 = r45702 + r45706;
        double r45708 = log(r45707);
        return r45708;
}


double f_of(float x) {
        float r45709 = x;
        float r45710 = -0.20805894893085658f;
        bool r45711 = r45709 <= r45710;
        float r45712 = 0.125f;
        float r45713 = r45712 / r45709;
        float r45714 = r45709 * r45709;
        float r45715 = r45713 / r45714;
        float r45716 = 0.5f;
        float r45717 = r45716 / r45709;
        float r45718 = r45715 - r45717;
        float r45719 = log(r45718);
        float r45720 = 85.36504497937187f;
        bool r45721 = r45709 <= r45720;
        float r45722 = 0.075f;
        float r45723 = 5.0f;
        float r45724 = pow(r45709, r45723);
        float r45725 = r45722 * r45724;
        float r45726 = r45725 + r45709;
        float r45727 = 0.16666666666666666f;
        float r45728 = 3.0f;
        float r45729 = pow(r45709, r45728);
        float r45730 = r45727 * r45729;
        float r45731 = r45726 - r45730;
        float r45732 = r45709 + r45709;
        float r45733 = r45717 + r45732;
        float r45734 = r45709 * (r45709 * r45709);
        float r45735 = r45712 / r45734;
        float r45736 = r45733 - r45735;
        float r45737 = log(r45736);
        float r45738 = r45721 ? r45731 : r45737;
        float r45739 = r45711 ? r45719 : r45738;
        return r45739;
}

double f_od(double x) {
        double r45740 = x;
        double r45741 = -0.20805894893085658;
        bool r45742 = r45740 <= r45741;
        double r45743 = 0.125;
        double r45744 = r45743 / r45740;
        double r45745 = r45740 * r45740;
        double r45746 = r45744 / r45745;
        double r45747 = 0.5;
        double r45748 = r45747 / r45740;
        double r45749 = r45746 - r45748;
        double r45750 = log(r45749);
        double r45751 = 85.36504497937187;
        bool r45752 = r45740 <= r45751;
        double r45753 = 0.075;
        double r45754 = 5.0;
        double r45755 = pow(r45740, r45754);
        double r45756 = r45753 * r45755;
        double r45757 = r45756 + r45740;
        double r45758 = 0.16666666666666666;
        double r45759 = 3.0;
        double r45760 = pow(r45740, r45759);
        double r45761 = r45758 * r45760;
        double r45762 = r45757 - r45761;
        double r45763 = r45740 + r45740;
        double r45764 = r45748 + r45763;
        double r45765 = r45740 * (r45740 * r45740);
        double r45766 = r45743 / r45765;
        double r45767 = r45764 - r45766;
        double r45768 = log(r45767);
        double r45769 = r45752 ? r45762 : r45768;
        double r45770 = r45742 ? r45750 : r45769;
        return r45770;
}

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 r45771, r45772, r45773, r45774, r45775, r45776, r45777;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r45771);
        mpfr_init(r45772);
        mpfr_init_set_str(r45773, "1", 10, MPFR_RNDN);
        mpfr_init(r45774);
        mpfr_init(r45775);
        mpfr_init(r45776);
        mpfr_init(r45777);
}

double f_im(double x) {
        mpfr_set_d(r45771, x, MPFR_RNDN);
        mpfr_sqr(r45772, r45771, MPFR_RNDN);
        ;
        mpfr_add(r45774, r45772, r45773, MPFR_RNDN);
        mpfr_sqrt(r45775, r45774, MPFR_RNDN);
        mpfr_add(r45776, r45771, r45775, MPFR_RNDN);
        mpfr_log(r45777, r45776, MPFR_RNDN);
        return mpfr_get_d(r45777, MPFR_RNDN);
}

static mpfr_t r45778, r45779, r45780, r45781, r45782, r45783, r45784, r45785, r45786, r45787, r45788, r45789, r45790, r45791, r45792, r45793, r45794, r45795, r45796, r45797, r45798, r45799, r45800, r45801, r45802, r45803, r45804, r45805, r45806, r45807, r45808;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r45778);
        mpfr_init_set_str(r45779, "-0.20805894893085658", 10, MPFR_RNDN);
        mpfr_init(r45780);
        mpfr_init_set_str(r45781, "1/8", 10, MPFR_RNDN);
        mpfr_init(r45782);
        mpfr_init(r45783);
        mpfr_init(r45784);
        mpfr_init_set_str(r45785, "1/2", 10, MPFR_RNDN);
        mpfr_init(r45786);
        mpfr_init(r45787);
        mpfr_init(r45788);
        mpfr_init_set_str(r45789, "85.36504497937187", 10, MPFR_RNDN);
        mpfr_init(r45790);
        mpfr_init_set_str(r45791, "3/40", 10, MPFR_RNDN);
        mpfr_init_set_str(r45792, "5", 10, MPFR_RNDN);
        mpfr_init(r45793);
        mpfr_init(r45794);
        mpfr_init(r45795);
        mpfr_init_set_str(r45796, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r45797, "3", 10, MPFR_RNDN);
        mpfr_init(r45798);
        mpfr_init(r45799);
        mpfr_init(r45800);
        mpfr_init(r45801);
        mpfr_init(r45802);
        mpfr_init(r45803);
        mpfr_init(r45804);
        mpfr_init(r45805);
        mpfr_init(r45806);
        mpfr_init(r45807);
        mpfr_init(r45808);
}

double f_fm(double x) {
        mpfr_set_d(r45778, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45780, mpfr_cmp(r45778, r45779) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r45782, r45781, r45778, MPFR_RNDN);
        mpfr_sqr(r45783, r45778, MPFR_RNDN);
        mpfr_div(r45784, r45782, r45783, MPFR_RNDN);
        ;
        mpfr_div(r45786, r45785, r45778, MPFR_RNDN);
        mpfr_sub(r45787, r45784, r45786, MPFR_RNDN);
        mpfr_log(r45788, r45787, MPFR_RNDN);
        ;
        mpfr_set_si(r45790, mpfr_cmp(r45778, r45789) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45793, r45778, r45792, MPFR_RNDN);
        mpfr_mul(r45794, r45791, r45793, MPFR_RNDN);
        mpfr_add(r45795, r45794, r45778, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45798, r45778, r45797, MPFR_RNDN);
        mpfr_mul(r45799, r45796, r45798, MPFR_RNDN);
        mpfr_sub(r45800, r45795, r45799, MPFR_RNDN);
        mpfr_add(r45801, r45778, r45778, MPFR_RNDN);
        mpfr_add(r45802, r45786, r45801, MPFR_RNDN);
        mpfr_mul(r45803, r45778, r45778, MPFR_RNDN); mpfr_mul(r45803, r45803, r45778, MPFR_RNDN);
        mpfr_div(r45804, r45781, r45803, MPFR_RNDN);
        mpfr_sub(r45805, r45802, r45804, MPFR_RNDN);
        mpfr_log(r45806, r45805, MPFR_RNDN);
        if (mpfr_get_si(r45790, MPFR_RNDN)) { mpfr_set(r45807, r45800, MPFR_RNDN); } else { mpfr_set(r45807, r45806, MPFR_RNDN); };
        if (mpfr_get_si(r45780, MPFR_RNDN)) { mpfr_set(r45808, r45788, MPFR_RNDN); } else { mpfr_set(r45808, r45807, MPFR_RNDN); };
        return mpfr_get_d(r45808, MPFR_RNDN);
}

static mpfr_t r45809, r45810, r45811, r45812, r45813, r45814, r45815, r45816, r45817, r45818, r45819, r45820, r45821, r45822, r45823, r45824, r45825, r45826, r45827, r45828, r45829, r45830, r45831, r45832, r45833, r45834, r45835, r45836, r45837, r45838, r45839;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r45809);
        mpfr_init_set_str(r45810, "-0.20805894893085658", 10, MPFR_RNDN);
        mpfr_init(r45811);
        mpfr_init_set_str(r45812, "1/8", 10, MPFR_RNDN);
        mpfr_init(r45813);
        mpfr_init(r45814);
        mpfr_init(r45815);
        mpfr_init_set_str(r45816, "1/2", 10, MPFR_RNDN);
        mpfr_init(r45817);
        mpfr_init(r45818);
        mpfr_init(r45819);
        mpfr_init_set_str(r45820, "85.36504497937187", 10, MPFR_RNDN);
        mpfr_init(r45821);
        mpfr_init_set_str(r45822, "3/40", 10, MPFR_RNDN);
        mpfr_init_set_str(r45823, "5", 10, MPFR_RNDN);
        mpfr_init(r45824);
        mpfr_init(r45825);
        mpfr_init(r45826);
        mpfr_init_set_str(r45827, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r45828, "3", 10, MPFR_RNDN);
        mpfr_init(r45829);
        mpfr_init(r45830);
        mpfr_init(r45831);
        mpfr_init(r45832);
        mpfr_init(r45833);
        mpfr_init(r45834);
        mpfr_init(r45835);
        mpfr_init(r45836);
        mpfr_init(r45837);
        mpfr_init(r45838);
        mpfr_init(r45839);
}

double f_dm(double x) {
        mpfr_set_d(r45809, x, MPFR_RNDN);
        ;
        mpfr_set_si(r45811, mpfr_cmp(r45809, r45810) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r45813, r45812, r45809, MPFR_RNDN);
        mpfr_sqr(r45814, r45809, MPFR_RNDN);
        mpfr_div(r45815, r45813, r45814, MPFR_RNDN);
        ;
        mpfr_div(r45817, r45816, r45809, MPFR_RNDN);
        mpfr_sub(r45818, r45815, r45817, MPFR_RNDN);
        mpfr_log(r45819, r45818, MPFR_RNDN);
        ;
        mpfr_set_si(r45821, mpfr_cmp(r45809, r45820) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45824, r45809, r45823, MPFR_RNDN);
        mpfr_mul(r45825, r45822, r45824, MPFR_RNDN);
        mpfr_add(r45826, r45825, r45809, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r45829, r45809, r45828, MPFR_RNDN);
        mpfr_mul(r45830, r45827, r45829, MPFR_RNDN);
        mpfr_sub(r45831, r45826, r45830, MPFR_RNDN);
        mpfr_add(r45832, r45809, r45809, MPFR_RNDN);
        mpfr_add(r45833, r45817, r45832, MPFR_RNDN);
        mpfr_mul(r45834, r45809, r45809, MPFR_RNDN); mpfr_mul(r45834, r45834, r45809, MPFR_RNDN);
        mpfr_div(r45835, r45812, r45834, MPFR_RNDN);
        mpfr_sub(r45836, r45833, r45835, MPFR_RNDN);
        mpfr_log(r45837, r45836, MPFR_RNDN);
        if (mpfr_get_si(r45821, MPFR_RNDN)) { mpfr_set(r45838, r45831, MPFR_RNDN); } else { mpfr_set(r45838, r45837, MPFR_RNDN); };
        if (mpfr_get_si(r45811, MPFR_RNDN)) { mpfr_set(r45839, r45819, MPFR_RNDN); } else { mpfr_set(r45839, r45838, MPFR_RNDN); };
        return mpfr_get_d(r45839, MPFR_RNDN);
}

