#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 r27509 = x;
        float r27510 = r27509 * r27509;
        float r27511 = 1;
        float r27512 = r27510 + r27511;
        float r27513 = sqrt(r27512);
        float r27514 = r27509 + r27513;
        float r27515 = log(r27514);
        return r27515;
}

double f_id(double x) {
        double r27516 = x;
        double r27517 = r27516 * r27516;
        double r27518 = 1;
        double r27519 = r27517 + r27518;
        double r27520 = sqrt(r27519);
        double r27521 = r27516 + r27520;
        double r27522 = log(r27521);
        return r27522;
}


double f_of(float x) {
        float r27523 = x;
        float r27524 = -1.0629219892045554;
        bool r27525 = r27523 <= r27524;
        float r27526 = 1;
        float r27527 = r27526 / r27523;
        float r27528 = 1/8;
        float r27529 = r27528 / r27523;
        float r27530 = 1/2;
        float r27531 = -r27530;
        float r27532 = fma(r27527, r27529, r27531);
        float r27533 = 1/16;
        float r27534 = -r27533;
        float r27535 = 5;
        float r27536 = pow(r27523, r27535);
        float r27537 = r27534 / r27536;
        float r27538 = fma(r27527, r27532, r27537);
        float r27539 = log(r27538);
        float r27540 = 0.008797011270032927;
        bool r27541 = r27523 <= r27540;
        float r27542 = 3/40;
        float r27543 = r27542 * r27536;
        float r27544 = r27543 + r27523;
        float r27545 = 1/6;
        float r27546 = 3;
        float r27547 = pow(r27523, r27546);
        float r27548 = r27545 * r27547;
        float r27549 = r27544 - r27548;
        float r27550 = hypot(r27526, r27523);
        float r27551 = sqrt(r27550);
        float r27552 = fma(r27551, r27551, r27523);
        float r27553 = log(r27552);
        float r27554 = r27541 ? r27549 : r27553;
        float r27555 = r27525 ? r27539 : r27554;
        return r27555;
}

double f_od(double x) {
        double r27556 = x;
        double r27557 = -1.0629219892045554;
        bool r27558 = r27556 <= r27557;
        double r27559 = 1;
        double r27560 = r27559 / r27556;
        double r27561 = 1/8;
        double r27562 = r27561 / r27556;
        double r27563 = 1/2;
        double r27564 = -r27563;
        double r27565 = fma(r27560, r27562, r27564);
        double r27566 = 1/16;
        double r27567 = -r27566;
        double r27568 = 5;
        double r27569 = pow(r27556, r27568);
        double r27570 = r27567 / r27569;
        double r27571 = fma(r27560, r27565, r27570);
        double r27572 = log(r27571);
        double r27573 = 0.008797011270032927;
        bool r27574 = r27556 <= r27573;
        double r27575 = 3/40;
        double r27576 = r27575 * r27569;
        double r27577 = r27576 + r27556;
        double r27578 = 1/6;
        double r27579 = 3;
        double r27580 = pow(r27556, r27579);
        double r27581 = r27578 * r27580;
        double r27582 = r27577 - r27581;
        double r27583 = hypot(r27559, r27556);
        double r27584 = sqrt(r27583);
        double r27585 = fma(r27584, r27584, r27556);
        double r27586 = log(r27585);
        double r27587 = r27574 ? r27582 : r27586;
        double r27588 = r27558 ? r27572 : r27587;
        return r27588;
}

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 r27589, r27590, r27591, r27592, r27593, r27594, r27595;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27589);
        mpfr_init(r27590);
        mpfr_init_set_str(r27591, "1", 10, MPFR_RNDN);
        mpfr_init(r27592);
        mpfr_init(r27593);
        mpfr_init(r27594);
        mpfr_init(r27595);
}

double f_im(double x) {
        mpfr_set_d(r27589, x, MPFR_RNDN);
        mpfr_mul(r27590, r27589, r27589, MPFR_RNDN);
        ;
        mpfr_add(r27592, r27590, r27591, MPFR_RNDN);
        mpfr_sqrt(r27593, r27592, MPFR_RNDN);
        mpfr_add(r27594, r27589, r27593, MPFR_RNDN);
        mpfr_log(r27595, r27594, MPFR_RNDN);
        return mpfr_get_d(r27595, MPFR_RNDN);
}

static mpfr_t r27596, r27597, r27598, r27599, r27600, r27601, r27602, r27603, r27604, r27605, r27606, r27607, r27608, r27609, r27610, r27611, r27612, r27613, r27614, r27615, r27616, r27617, r27618, r27619, r27620, r27621, r27622, r27623, r27624, r27625, r27626, r27627, r27628;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27596);
        mpfr_init_set_str(r27597, "-1.0629219892045554", 10, MPFR_RNDN);
        mpfr_init(r27598);
        mpfr_init_set_str(r27599, "1", 10, MPFR_RNDN);
        mpfr_init(r27600);
        mpfr_init_set_str(r27601, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27602);
        mpfr_init_set_str(r27603, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27604);
        mpfr_init(r27605);
        mpfr_init_set_str(r27606, "1/16", 10, MPFR_RNDN);
        mpfr_init(r27607);
        mpfr_init_set_str(r27608, "5", 10, MPFR_RNDN);
        mpfr_init(r27609);
        mpfr_init(r27610);
        mpfr_init(r27611);
        mpfr_init(r27612);
        mpfr_init_set_str(r27613, "0.008797011270032927", 10, MPFR_RNDN);
        mpfr_init(r27614);
        mpfr_init_set_str(r27615, "3/40", 10, MPFR_RNDN);
        mpfr_init(r27616);
        mpfr_init(r27617);
        mpfr_init_set_str(r27618, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r27619, "3", 10, MPFR_RNDN);
        mpfr_init(r27620);
        mpfr_init(r27621);
        mpfr_init(r27622);
        mpfr_init(r27623);
        mpfr_init(r27624);
        mpfr_init(r27625);
        mpfr_init(r27626);
        mpfr_init(r27627);
        mpfr_init(r27628);
}

double f_fm(double x) {
        mpfr_set_d(r27596, x, MPFR_RNDN);
        ;
        mpfr_set_si(r27598, mpfr_cmp(r27596, r27597) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27600, r27599, r27596, MPFR_RNDN);
        ;
        mpfr_div(r27602, r27601, r27596, MPFR_RNDN);
        ;
        mpfr_neg(r27604, r27603, MPFR_RNDN);
        mpfr_fma(r27605, r27600, r27602, r27604, MPFR_RNDN);
        ;
        mpfr_neg(r27607, r27606, MPFR_RNDN);
        ;
        mpfr_pow(r27609, r27596, r27608, MPFR_RNDN);
        mpfr_div(r27610, r27607, r27609, MPFR_RNDN);
        mpfr_fma(r27611, r27600, r27605, r27610, MPFR_RNDN);
        mpfr_log(r27612, r27611, MPFR_RNDN);
        ;
        mpfr_set_si(r27614, mpfr_cmp(r27596, r27613) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27616, r27615, r27609, MPFR_RNDN);
        mpfr_add(r27617, r27616, r27596, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27620, r27596, r27619, MPFR_RNDN);
        mpfr_mul(r27621, r27618, r27620, MPFR_RNDN);
        mpfr_sub(r27622, r27617, r27621, MPFR_RNDN);
        mpfr_hypot(r27623, r27599, r27596, MPFR_RNDN);
        mpfr_sqrt(r27624, r27623, MPFR_RNDN);
        mpfr_fma(r27625, r27624, r27624, r27596, MPFR_RNDN);
        mpfr_log(r27626, r27625, MPFR_RNDN);
        if (mpfr_get_si(r27614, MPFR_RNDN)) { mpfr_set(r27627, r27622, MPFR_RNDN); } else { mpfr_set(r27627, r27626, MPFR_RNDN); };
        if (mpfr_get_si(r27598, MPFR_RNDN)) { mpfr_set(r27628, r27612, MPFR_RNDN); } else { mpfr_set(r27628, r27627, MPFR_RNDN); };
        return mpfr_get_d(r27628, MPFR_RNDN);
}

static mpfr_t r27629, r27630, r27631, r27632, r27633, r27634, r27635, r27636, r27637, r27638, r27639, r27640, r27641, r27642, r27643, r27644, r27645, r27646, r27647, r27648, r27649, r27650, r27651, r27652, r27653, r27654, r27655, r27656, r27657, r27658, r27659, r27660, r27661;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27629);
        mpfr_init_set_str(r27630, "-1.0629219892045554", 10, MPFR_RNDN);
        mpfr_init(r27631);
        mpfr_init_set_str(r27632, "1", 10, MPFR_RNDN);
        mpfr_init(r27633);
        mpfr_init_set_str(r27634, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27635);
        mpfr_init_set_str(r27636, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27637);
        mpfr_init(r27638);
        mpfr_init_set_str(r27639, "1/16", 10, MPFR_RNDN);
        mpfr_init(r27640);
        mpfr_init_set_str(r27641, "5", 10, MPFR_RNDN);
        mpfr_init(r27642);
        mpfr_init(r27643);
        mpfr_init(r27644);
        mpfr_init(r27645);
        mpfr_init_set_str(r27646, "0.008797011270032927", 10, MPFR_RNDN);
        mpfr_init(r27647);
        mpfr_init_set_str(r27648, "3/40", 10, MPFR_RNDN);
        mpfr_init(r27649);
        mpfr_init(r27650);
        mpfr_init_set_str(r27651, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r27652, "3", 10, MPFR_RNDN);
        mpfr_init(r27653);
        mpfr_init(r27654);
        mpfr_init(r27655);
        mpfr_init(r27656);
        mpfr_init(r27657);
        mpfr_init(r27658);
        mpfr_init(r27659);
        mpfr_init(r27660);
        mpfr_init(r27661);
}

double f_dm(double x) {
        mpfr_set_d(r27629, x, MPFR_RNDN);
        ;
        mpfr_set_si(r27631, mpfr_cmp(r27629, r27630) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27633, r27632, r27629, MPFR_RNDN);
        ;
        mpfr_div(r27635, r27634, r27629, MPFR_RNDN);
        ;
        mpfr_neg(r27637, r27636, MPFR_RNDN);
        mpfr_fma(r27638, r27633, r27635, r27637, MPFR_RNDN);
        ;
        mpfr_neg(r27640, r27639, MPFR_RNDN);
        ;
        mpfr_pow(r27642, r27629, r27641, MPFR_RNDN);
        mpfr_div(r27643, r27640, r27642, MPFR_RNDN);
        mpfr_fma(r27644, r27633, r27638, r27643, MPFR_RNDN);
        mpfr_log(r27645, r27644, MPFR_RNDN);
        ;
        mpfr_set_si(r27647, mpfr_cmp(r27629, r27646) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27649, r27648, r27642, MPFR_RNDN);
        mpfr_add(r27650, r27649, r27629, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27653, r27629, r27652, MPFR_RNDN);
        mpfr_mul(r27654, r27651, r27653, MPFR_RNDN);
        mpfr_sub(r27655, r27650, r27654, MPFR_RNDN);
        mpfr_hypot(r27656, r27632, r27629, MPFR_RNDN);
        mpfr_sqrt(r27657, r27656, MPFR_RNDN);
        mpfr_fma(r27658, r27657, r27657, r27629, MPFR_RNDN);
        mpfr_log(r27659, r27658, MPFR_RNDN);
        if (mpfr_get_si(r27647, MPFR_RNDN)) { mpfr_set(r27660, r27655, MPFR_RNDN); } else { mpfr_set(r27660, r27659, MPFR_RNDN); };
        if (mpfr_get_si(r27631, MPFR_RNDN)) { mpfr_set(r27661, r27645, MPFR_RNDN); } else { mpfr_set(r27661, r27660, MPFR_RNDN); };
        return mpfr_get_d(r27661, MPFR_RNDN);
}

