#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 r24923 = x;
        float r24924 = r24923 * r24923;
        float r24925 = 1;
        float r24926 = r24924 + r24925;
        float r24927 = sqrt(r24926);
        float r24928 = r24923 + r24927;
        float r24929 = log(r24928);
        return r24929;
}

double f_id(double x) {
        double r24930 = x;
        double r24931 = r24930 * r24930;
        double r24932 = 1;
        double r24933 = r24931 + r24932;
        double r24934 = sqrt(r24933);
        double r24935 = r24930 + r24934;
        double r24936 = log(r24935);
        return r24936;
}


double f_of(float x) {
        float r24937 = x;
        float r24938 = -1.3695621964359392;
        bool r24939 = r24937 <= r24938;
        float r24940 = 1/8;
        float r24941 = r24940 / r24937;
        float r24942 = r24937 * r24937;
        float r24943 = r24941 / r24942;
        float r24944 = 1/2;
        float r24945 = r24944 / r24937;
        float r24946 = r24943 - r24945;
        float r24947 = log(r24946);
        float r24948 = 0.9358634050116852;
        bool r24949 = r24937 <= r24948;
        float r24950 = 3/40;
        float r24951 = 5;
        float r24952 = pow(r24937, r24951);
        float r24953 = r24950 * r24952;
        float r24954 = r24953 + r24937;
        float r24955 = 1/6;
        float r24956 = 3;
        float r24957 = pow(r24937, r24956);
        float r24958 = r24955 * r24957;
        float r24959 = r24954 - r24958;
        float r24960 = r24937 + r24937;
        float r24961 = r24960 + r24945;
        float r24962 = r24961 - r24943;
        float r24963 = log(r24962);
        float r24964 = r24949 ? r24959 : r24963;
        float r24965 = r24939 ? r24947 : r24964;
        return r24965;
}

double f_od(double x) {
        double r24966 = x;
        double r24967 = -1.3695621964359392;
        bool r24968 = r24966 <= r24967;
        double r24969 = 1/8;
        double r24970 = r24969 / r24966;
        double r24971 = r24966 * r24966;
        double r24972 = r24970 / r24971;
        double r24973 = 1/2;
        double r24974 = r24973 / r24966;
        double r24975 = r24972 - r24974;
        double r24976 = log(r24975);
        double r24977 = 0.9358634050116852;
        bool r24978 = r24966 <= r24977;
        double r24979 = 3/40;
        double r24980 = 5;
        double r24981 = pow(r24966, r24980);
        double r24982 = r24979 * r24981;
        double r24983 = r24982 + r24966;
        double r24984 = 1/6;
        double r24985 = 3;
        double r24986 = pow(r24966, r24985);
        double r24987 = r24984 * r24986;
        double r24988 = r24983 - r24987;
        double r24989 = r24966 + r24966;
        double r24990 = r24989 + r24974;
        double r24991 = r24990 - r24972;
        double r24992 = log(r24991);
        double r24993 = r24978 ? r24988 : r24992;
        double r24994 = r24968 ? r24976 : r24993;
        return r24994;
}

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 r24995, r24996, r24997, r24998, r24999, r25000, r25001;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r24995);
        mpfr_init(r24996);
        mpfr_init_set_str(r24997, "1", 10, MPFR_RNDN);
        mpfr_init(r24998);
        mpfr_init(r24999);
        mpfr_init(r25000);
        mpfr_init(r25001);
}

double f_im(double x) {
        mpfr_set_d(r24995, x, MPFR_RNDN);
        mpfr_mul(r24996, r24995, r24995, MPFR_RNDN);
        ;
        mpfr_add(r24998, r24996, r24997, MPFR_RNDN);
        mpfr_sqrt(r24999, r24998, MPFR_RNDN);
        mpfr_add(r25000, r24995, r24999, MPFR_RNDN);
        mpfr_log(r25001, r25000, MPFR_RNDN);
        return mpfr_get_d(r25001, MPFR_RNDN);
}

static mpfr_t r25002, r25003, r25004, r25005, r25006, r25007, r25008, r25009, r25010, r25011, r25012, r25013, r25014, r25015, r25016, r25017, r25018, r25019, r25020, r25021, r25022, r25023, r25024, r25025, r25026, r25027, r25028, r25029, r25030;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r25002);
        mpfr_init_set_str(r25003, "-1.3695621964359392", 10, MPFR_RNDN);
        mpfr_init(r25004);
        mpfr_init_set_str(r25005, "1/8", 10, MPFR_RNDN);
        mpfr_init(r25006);
        mpfr_init(r25007);
        mpfr_init(r25008);
        mpfr_init_set_str(r25009, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25010);
        mpfr_init(r25011);
        mpfr_init(r25012);
        mpfr_init_set_str(r25013, "0.9358634050116852", 10, MPFR_RNDN);
        mpfr_init(r25014);
        mpfr_init_set_str(r25015, "3/40", 10, MPFR_RNDN);
        mpfr_init_set_str(r25016, "5", 10, MPFR_RNDN);
        mpfr_init(r25017);
        mpfr_init(r25018);
        mpfr_init(r25019);
        mpfr_init_set_str(r25020, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r25021, "3", 10, MPFR_RNDN);
        mpfr_init(r25022);
        mpfr_init(r25023);
        mpfr_init(r25024);
        mpfr_init(r25025);
        mpfr_init(r25026);
        mpfr_init(r25027);
        mpfr_init(r25028);
        mpfr_init(r25029);
        mpfr_init(r25030);
}

double f_fm(double x) {
        mpfr_set_d(r25002, x, MPFR_RNDN);
        ;
        mpfr_set_si(r25004, mpfr_cmp(r25002, r25003) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r25006, r25005, r25002, MPFR_RNDN);
        mpfr_mul(r25007, r25002, r25002, MPFR_RNDN);
        mpfr_div(r25008, r25006, r25007, MPFR_RNDN);
        ;
        mpfr_div(r25010, r25009, r25002, MPFR_RNDN);
        mpfr_sub(r25011, r25008, r25010, MPFR_RNDN);
        mpfr_log(r25012, r25011, MPFR_RNDN);
        ;
        mpfr_set_si(r25014, mpfr_cmp(r25002, r25013) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r25017, r25002, r25016, MPFR_RNDN);
        mpfr_mul(r25018, r25015, r25017, MPFR_RNDN);
        mpfr_add(r25019, r25018, r25002, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r25022, r25002, r25021, MPFR_RNDN);
        mpfr_mul(r25023, r25020, r25022, MPFR_RNDN);
        mpfr_sub(r25024, r25019, r25023, MPFR_RNDN);
        mpfr_add(r25025, r25002, r25002, MPFR_RNDN);
        mpfr_add(r25026, r25025, r25010, MPFR_RNDN);
        mpfr_sub(r25027, r25026, r25008, MPFR_RNDN);
        mpfr_log(r25028, r25027, MPFR_RNDN);
        if (mpfr_get_si(r25014, MPFR_RNDN)) { mpfr_set(r25029, r25024, MPFR_RNDN); } else { mpfr_set(r25029, r25028, MPFR_RNDN); };
        if (mpfr_get_si(r25004, MPFR_RNDN)) { mpfr_set(r25030, r25012, MPFR_RNDN); } else { mpfr_set(r25030, r25029, MPFR_RNDN); };
        return mpfr_get_d(r25030, MPFR_RNDN);
}

static mpfr_t r25031, r25032, r25033, r25034, r25035, r25036, r25037, r25038, r25039, r25040, r25041, r25042, r25043, r25044, r25045, r25046, r25047, r25048, r25049, r25050, r25051, r25052, r25053, r25054, r25055, r25056, r25057, r25058, r25059;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r25031);
        mpfr_init_set_str(r25032, "-1.3695621964359392", 10, MPFR_RNDN);
        mpfr_init(r25033);
        mpfr_init_set_str(r25034, "1/8", 10, MPFR_RNDN);
        mpfr_init(r25035);
        mpfr_init(r25036);
        mpfr_init(r25037);
        mpfr_init_set_str(r25038, "1/2", 10, MPFR_RNDN);
        mpfr_init(r25039);
        mpfr_init(r25040);
        mpfr_init(r25041);
        mpfr_init_set_str(r25042, "0.9358634050116852", 10, MPFR_RNDN);
        mpfr_init(r25043);
        mpfr_init_set_str(r25044, "3/40", 10, MPFR_RNDN);
        mpfr_init_set_str(r25045, "5", 10, MPFR_RNDN);
        mpfr_init(r25046);
        mpfr_init(r25047);
        mpfr_init(r25048);
        mpfr_init_set_str(r25049, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r25050, "3", 10, MPFR_RNDN);
        mpfr_init(r25051);
        mpfr_init(r25052);
        mpfr_init(r25053);
        mpfr_init(r25054);
        mpfr_init(r25055);
        mpfr_init(r25056);
        mpfr_init(r25057);
        mpfr_init(r25058);
        mpfr_init(r25059);
}

double f_dm(double x) {
        mpfr_set_d(r25031, x, MPFR_RNDN);
        ;
        mpfr_set_si(r25033, mpfr_cmp(r25031, r25032) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r25035, r25034, r25031, MPFR_RNDN);
        mpfr_mul(r25036, r25031, r25031, MPFR_RNDN);
        mpfr_div(r25037, r25035, r25036, MPFR_RNDN);
        ;
        mpfr_div(r25039, r25038, r25031, MPFR_RNDN);
        mpfr_sub(r25040, r25037, r25039, MPFR_RNDN);
        mpfr_log(r25041, r25040, MPFR_RNDN);
        ;
        mpfr_set_si(r25043, mpfr_cmp(r25031, r25042) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r25046, r25031, r25045, MPFR_RNDN);
        mpfr_mul(r25047, r25044, r25046, MPFR_RNDN);
        mpfr_add(r25048, r25047, r25031, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r25051, r25031, r25050, MPFR_RNDN);
        mpfr_mul(r25052, r25049, r25051, MPFR_RNDN);
        mpfr_sub(r25053, r25048, r25052, MPFR_RNDN);
        mpfr_add(r25054, r25031, r25031, MPFR_RNDN);
        mpfr_add(r25055, r25054, r25039, MPFR_RNDN);
        mpfr_sub(r25056, r25055, r25037, MPFR_RNDN);
        mpfr_log(r25057, r25056, MPFR_RNDN);
        if (mpfr_get_si(r25043, MPFR_RNDN)) { mpfr_set(r25058, r25053, MPFR_RNDN); } else { mpfr_set(r25058, r25057, MPFR_RNDN); };
        if (mpfr_get_si(r25033, MPFR_RNDN)) { mpfr_set(r25059, r25041, MPFR_RNDN); } else { mpfr_set(r25059, r25058, MPFR_RNDN); };
        return mpfr_get_d(r25059, MPFR_RNDN);
}

