#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 r27530 = x;
        float r27531 = r27530 * r27530;
        float r27532 = 1;
        float r27533 = r27531 + r27532;
        float r27534 = sqrt(r27533);
        float r27535 = r27530 + r27534;
        float r27536 = log(r27535);
        return r27536;
}

double f_id(double x) {
        double r27537 = x;
        double r27538 = r27537 * r27537;
        double r27539 = 1;
        double r27540 = r27538 + r27539;
        double r27541 = sqrt(r27540);
        double r27542 = r27537 + r27541;
        double r27543 = log(r27542);
        return r27543;
}


double f_of(float x) {
        float r27544 = x;
        float r27545 = -1.0585799513054983;
        bool r27546 = r27544 <= r27545;
        float r27547 = 1;
        float r27548 = r27547 / r27544;
        float r27549 = 1/8;
        float r27550 = r27549 / r27544;
        float r27551 = 1/2;
        float r27552 = -r27551;
        float r27553 = fma(r27548, r27550, r27552);
        float r27554 = 1/16;
        float r27555 = -r27554;
        float r27556 = 5;
        float r27557 = pow(r27544, r27556);
        float r27558 = r27555 / r27557;
        float r27559 = fma(r27548, r27553, r27558);
        float r27560 = log(r27559);
        float r27561 = 0.008260310925820415;
        bool r27562 = r27544 <= r27561;
        float r27563 = 3/40;
        float r27564 = r27563 * r27557;
        float r27565 = r27564 + r27544;
        float r27566 = 1/6;
        float r27567 = 3;
        float r27568 = pow(r27544, r27567);
        float r27569 = r27566 * r27568;
        float r27570 = r27565 - r27569;
        float r27571 = hypot(r27547, r27544);
        float r27572 = sqrt(r27571);
        float r27573 = fma(r27572, r27572, r27544);
        float r27574 = log(r27573);
        float r27575 = r27562 ? r27570 : r27574;
        float r27576 = r27546 ? r27560 : r27575;
        return r27576;
}

double f_od(double x) {
        double r27577 = x;
        double r27578 = -1.0585799513054983;
        bool r27579 = r27577 <= r27578;
        double r27580 = 1;
        double r27581 = r27580 / r27577;
        double r27582 = 1/8;
        double r27583 = r27582 / r27577;
        double r27584 = 1/2;
        double r27585 = -r27584;
        double r27586 = fma(r27581, r27583, r27585);
        double r27587 = 1/16;
        double r27588 = -r27587;
        double r27589 = 5;
        double r27590 = pow(r27577, r27589);
        double r27591 = r27588 / r27590;
        double r27592 = fma(r27581, r27586, r27591);
        double r27593 = log(r27592);
        double r27594 = 0.008260310925820415;
        bool r27595 = r27577 <= r27594;
        double r27596 = 3/40;
        double r27597 = r27596 * r27590;
        double r27598 = r27597 + r27577;
        double r27599 = 1/6;
        double r27600 = 3;
        double r27601 = pow(r27577, r27600);
        double r27602 = r27599 * r27601;
        double r27603 = r27598 - r27602;
        double r27604 = hypot(r27580, r27577);
        double r27605 = sqrt(r27604);
        double r27606 = fma(r27605, r27605, r27577);
        double r27607 = log(r27606);
        double r27608 = r27595 ? r27603 : r27607;
        double r27609 = r27579 ? r27593 : r27608;
        return r27609;
}

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 r27610, r27611, r27612, r27613, r27614, r27615, r27616;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27610);
        mpfr_init(r27611);
        mpfr_init_set_str(r27612, "1", 10, MPFR_RNDN);
        mpfr_init(r27613);
        mpfr_init(r27614);
        mpfr_init(r27615);
        mpfr_init(r27616);
}

double f_im(double x) {
        mpfr_set_d(r27610, x, MPFR_RNDN);
        mpfr_mul(r27611, r27610, r27610, MPFR_RNDN);
        ;
        mpfr_add(r27613, r27611, r27612, MPFR_RNDN);
        mpfr_sqrt(r27614, r27613, MPFR_RNDN);
        mpfr_add(r27615, r27610, r27614, MPFR_RNDN);
        mpfr_log(r27616, r27615, MPFR_RNDN);
        return mpfr_get_d(r27616, MPFR_RNDN);
}

static mpfr_t r27617, r27618, r27619, r27620, r27621, r27622, r27623, r27624, r27625, r27626, r27627, r27628, r27629, r27630, r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638, r27639, r27640, r27641, r27642, r27643, r27644, r27645, r27646, r27647, r27648, r27649;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27617);
        mpfr_init_set_str(r27618, "-1.0585799513054983", 10, MPFR_RNDN);
        mpfr_init(r27619);
        mpfr_init_set_str(r27620, "1", 10, MPFR_RNDN);
        mpfr_init(r27621);
        mpfr_init_set_str(r27622, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27623);
        mpfr_init_set_str(r27624, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27625);
        mpfr_init(r27626);
        mpfr_init_set_str(r27627, "1/16", 10, MPFR_RNDN);
        mpfr_init(r27628);
        mpfr_init_set_str(r27629, "5", 10, MPFR_RNDN);
        mpfr_init(r27630);
        mpfr_init(r27631);
        mpfr_init(r27632);
        mpfr_init(r27633);
        mpfr_init_set_str(r27634, "0.008260310925820415", 10, MPFR_RNDN);
        mpfr_init(r27635);
        mpfr_init_set_str(r27636, "3/40", 10, MPFR_RNDN);
        mpfr_init(r27637);
        mpfr_init(r27638);
        mpfr_init_set_str(r27639, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r27640, "3", 10, MPFR_RNDN);
        mpfr_init(r27641);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init(r27646);
        mpfr_init(r27647);
        mpfr_init(r27648);
        mpfr_init(r27649);
}

double f_fm(double x) {
        mpfr_set_d(r27617, x, MPFR_RNDN);
        ;
        mpfr_set_si(r27619, mpfr_cmp(r27617, r27618) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27621, r27620, r27617, MPFR_RNDN);
        ;
        mpfr_div(r27623, r27622, r27617, MPFR_RNDN);
        ;
        mpfr_neg(r27625, r27624, MPFR_RNDN);
        mpfr_fma(r27626, r27621, r27623, r27625, MPFR_RNDN);
        ;
        mpfr_neg(r27628, r27627, MPFR_RNDN);
        ;
        mpfr_pow(r27630, r27617, r27629, MPFR_RNDN);
        mpfr_div(r27631, r27628, r27630, MPFR_RNDN);
        mpfr_fma(r27632, r27621, r27626, r27631, MPFR_RNDN);
        mpfr_log(r27633, r27632, MPFR_RNDN);
        ;
        mpfr_set_si(r27635, mpfr_cmp(r27617, r27634) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27637, r27636, r27630, MPFR_RNDN);
        mpfr_add(r27638, r27637, r27617, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27641, r27617, r27640, MPFR_RNDN);
        mpfr_mul(r27642, r27639, r27641, MPFR_RNDN);
        mpfr_sub(r27643, r27638, r27642, MPFR_RNDN);
        mpfr_hypot(r27644, r27620, r27617, MPFR_RNDN);
        mpfr_sqrt(r27645, r27644, MPFR_RNDN);
        mpfr_fma(r27646, r27645, r27645, r27617, MPFR_RNDN);
        mpfr_log(r27647, r27646, MPFR_RNDN);
        if (mpfr_get_si(r27635, MPFR_RNDN)) { mpfr_set(r27648, r27643, MPFR_RNDN); } else { mpfr_set(r27648, r27647, MPFR_RNDN); };
        if (mpfr_get_si(r27619, MPFR_RNDN)) { mpfr_set(r27649, r27633, MPFR_RNDN); } else { mpfr_set(r27649, r27648, MPFR_RNDN); };
        return mpfr_get_d(r27649, MPFR_RNDN);
}

static mpfr_t r27650, r27651, r27652, r27653, r27654, r27655, r27656, r27657, r27658, r27659, r27660, r27661, r27662, r27663, r27664, r27665, r27666, r27667, r27668, r27669, r27670, r27671, r27672, r27673, r27674, r27675, r27676, r27677, r27678, r27679, r27680, r27681, r27682;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27650);
        mpfr_init_set_str(r27651, "-1.0585799513054983", 10, MPFR_RNDN);
        mpfr_init(r27652);
        mpfr_init_set_str(r27653, "1", 10, MPFR_RNDN);
        mpfr_init(r27654);
        mpfr_init_set_str(r27655, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27656);
        mpfr_init_set_str(r27657, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27658);
        mpfr_init(r27659);
        mpfr_init_set_str(r27660, "1/16", 10, MPFR_RNDN);
        mpfr_init(r27661);
        mpfr_init_set_str(r27662, "5", 10, MPFR_RNDN);
        mpfr_init(r27663);
        mpfr_init(r27664);
        mpfr_init(r27665);
        mpfr_init(r27666);
        mpfr_init_set_str(r27667, "0.008260310925820415", 10, MPFR_RNDN);
        mpfr_init(r27668);
        mpfr_init_set_str(r27669, "3/40", 10, MPFR_RNDN);
        mpfr_init(r27670);
        mpfr_init(r27671);
        mpfr_init_set_str(r27672, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r27673, "3", 10, MPFR_RNDN);
        mpfr_init(r27674);
        mpfr_init(r27675);
        mpfr_init(r27676);
        mpfr_init(r27677);
        mpfr_init(r27678);
        mpfr_init(r27679);
        mpfr_init(r27680);
        mpfr_init(r27681);
        mpfr_init(r27682);
}

double f_dm(double x) {
        mpfr_set_d(r27650, x, MPFR_RNDN);
        ;
        mpfr_set_si(r27652, mpfr_cmp(r27650, r27651) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27654, r27653, r27650, MPFR_RNDN);
        ;
        mpfr_div(r27656, r27655, r27650, MPFR_RNDN);
        ;
        mpfr_neg(r27658, r27657, MPFR_RNDN);
        mpfr_fma(r27659, r27654, r27656, r27658, MPFR_RNDN);
        ;
        mpfr_neg(r27661, r27660, MPFR_RNDN);
        ;
        mpfr_pow(r27663, r27650, r27662, MPFR_RNDN);
        mpfr_div(r27664, r27661, r27663, MPFR_RNDN);
        mpfr_fma(r27665, r27654, r27659, r27664, MPFR_RNDN);
        mpfr_log(r27666, r27665, MPFR_RNDN);
        ;
        mpfr_set_si(r27668, mpfr_cmp(r27650, r27667) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27670, r27669, r27663, MPFR_RNDN);
        mpfr_add(r27671, r27670, r27650, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27674, r27650, r27673, MPFR_RNDN);
        mpfr_mul(r27675, r27672, r27674, MPFR_RNDN);
        mpfr_sub(r27676, r27671, r27675, MPFR_RNDN);
        mpfr_hypot(r27677, r27653, r27650, MPFR_RNDN);
        mpfr_sqrt(r27678, r27677, MPFR_RNDN);
        mpfr_fma(r27679, r27678, r27678, r27650, MPFR_RNDN);
        mpfr_log(r27680, r27679, MPFR_RNDN);
        if (mpfr_get_si(r27668, MPFR_RNDN)) { mpfr_set(r27681, r27676, MPFR_RNDN); } else { mpfr_set(r27681, r27680, MPFR_RNDN); };
        if (mpfr_get_si(r27652, MPFR_RNDN)) { mpfr_set(r27682, r27666, MPFR_RNDN); } else { mpfr_set(r27682, r27681, MPFR_RNDN); };
        return mpfr_get_d(r27682, MPFR_RNDN);
}

