#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 r48497 = x;
        float r48498 = r48497 * r48497;
        float r48499 = 1;
        float r48500 = r48498 + r48499;
        float r48501 = sqrt(r48500);
        float r48502 = r48497 + r48501;
        float r48503 = log(r48502);
        return r48503;
}

double f_id(double x) {
        double r48504 = x;
        double r48505 = r48504 * r48504;
        double r48506 = 1;
        double r48507 = r48505 + r48506;
        double r48508 = sqrt(r48507);
        double r48509 = r48504 + r48508;
        double r48510 = log(r48509);
        return r48510;
}


double f_of(float x) {
        float r48511 = x;
        float r48512 = -1.0800267154469456;
        bool r48513 = r48511 <= r48512;
        float r48514 = 1/8;
        float r48515 = r48514 / r48511;
        float r48516 = r48511 * r48511;
        float r48517 = r48515 / r48516;
        float r48518 = 1/16;
        float r48519 = 5;
        float r48520 = pow(r48511, r48519);
        float r48521 = r48518 / r48520;
        float r48522 = 1/2;
        float r48523 = r48522 / r48511;
        float r48524 = r48521 + r48523;
        float r48525 = r48517 - r48524;
        float r48526 = log(r48525);
        float r48527 = 0.95385117411035;
        bool r48528 = r48511 <= r48527;
        float r48529 = 3/40;
        float r48530 = r48529 * r48520;
        float r48531 = r48530 + r48511;
        float r48532 = 1/6;
        float r48533 = 3;
        float r48534 = pow(r48511, r48533);
        float r48535 = r48532 * r48534;
        float r48536 = r48531 - r48535;
        float r48537 = r48511 + r48511;
        float r48538 = r48523 + r48537;
        float r48539 = r48538 - r48517;
        float r48540 = log(r48539);
        float r48541 = r48528 ? r48536 : r48540;
        float r48542 = r48513 ? r48526 : r48541;
        return r48542;
}

double f_od(double x) {
        double r48543 = x;
        double r48544 = -1.0800267154469456;
        bool r48545 = r48543 <= r48544;
        double r48546 = 1/8;
        double r48547 = r48546 / r48543;
        double r48548 = r48543 * r48543;
        double r48549 = r48547 / r48548;
        double r48550 = 1/16;
        double r48551 = 5;
        double r48552 = pow(r48543, r48551);
        double r48553 = r48550 / r48552;
        double r48554 = 1/2;
        double r48555 = r48554 / r48543;
        double r48556 = r48553 + r48555;
        double r48557 = r48549 - r48556;
        double r48558 = log(r48557);
        double r48559 = 0.95385117411035;
        bool r48560 = r48543 <= r48559;
        double r48561 = 3/40;
        double r48562 = r48561 * r48552;
        double r48563 = r48562 + r48543;
        double r48564 = 1/6;
        double r48565 = 3;
        double r48566 = pow(r48543, r48565);
        double r48567 = r48564 * r48566;
        double r48568 = r48563 - r48567;
        double r48569 = r48543 + r48543;
        double r48570 = r48555 + r48569;
        double r48571 = r48570 - r48549;
        double r48572 = log(r48571);
        double r48573 = r48560 ? r48568 : r48572;
        double r48574 = r48545 ? r48558 : r48573;
        return r48574;
}

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 r48575, r48576, r48577, r48578, r48579, r48580, r48581;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r48575);
        mpfr_init(r48576);
        mpfr_init_set_str(r48577, "1", 10, MPFR_RNDN);
        mpfr_init(r48578);
        mpfr_init(r48579);
        mpfr_init(r48580);
        mpfr_init(r48581);
}

double f_im(double x) {
        mpfr_set_d(r48575, x, MPFR_RNDN);
        mpfr_mul(r48576, r48575, r48575, MPFR_RNDN);
        ;
        mpfr_add(r48578, r48576, r48577, MPFR_RNDN);
        mpfr_sqrt(r48579, r48578, MPFR_RNDN);
        mpfr_add(r48580, r48575, r48579, MPFR_RNDN);
        mpfr_log(r48581, r48580, MPFR_RNDN);
        return mpfr_get_d(r48581, MPFR_RNDN);
}

static mpfr_t r48582, r48583, r48584, r48585, r48586, r48587, r48588, r48589, r48590, r48591, r48592, r48593, r48594, r48595, r48596, r48597, r48598, r48599, r48600, r48601, r48602, r48603, r48604, r48605, r48606, r48607, r48608, r48609, r48610, r48611, r48612, r48613;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r48582);
        mpfr_init_set_str(r48583, "-1.0800267154469456", 10, MPFR_RNDN);
        mpfr_init(r48584);
        mpfr_init_set_str(r48585, "1/8", 10, MPFR_RNDN);
        mpfr_init(r48586);
        mpfr_init(r48587);
        mpfr_init(r48588);
        mpfr_init_set_str(r48589, "1/16", 10, MPFR_RNDN);
        mpfr_init_set_str(r48590, "5", 10, MPFR_RNDN);
        mpfr_init(r48591);
        mpfr_init(r48592);
        mpfr_init_set_str(r48593, "1/2", 10, MPFR_RNDN);
        mpfr_init(r48594);
        mpfr_init(r48595);
        mpfr_init(r48596);
        mpfr_init(r48597);
        mpfr_init_set_str(r48598, "0.95385117411035", 10, MPFR_RNDN);
        mpfr_init(r48599);
        mpfr_init_set_str(r48600, "3/40", 10, MPFR_RNDN);
        mpfr_init(r48601);
        mpfr_init(r48602);
        mpfr_init_set_str(r48603, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r48604, "3", 10, MPFR_RNDN);
        mpfr_init(r48605);
        mpfr_init(r48606);
        mpfr_init(r48607);
        mpfr_init(r48608);
        mpfr_init(r48609);
        mpfr_init(r48610);
        mpfr_init(r48611);
        mpfr_init(r48612);
        mpfr_init(r48613);
}

double f_fm(double x) {
        mpfr_set_d(r48582, x, MPFR_RNDN);
        ;
        mpfr_set_si(r48584, mpfr_cmp(r48582, r48583) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r48586, r48585, r48582, MPFR_RNDN);
        mpfr_mul(r48587, r48582, r48582, MPFR_RNDN);
        mpfr_div(r48588, r48586, r48587, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48591, r48582, r48590, MPFR_RNDN);
        mpfr_div(r48592, r48589, r48591, MPFR_RNDN);
        ;
        mpfr_div(r48594, r48593, r48582, MPFR_RNDN);
        mpfr_add(r48595, r48592, r48594, MPFR_RNDN);
        mpfr_sub(r48596, r48588, r48595, MPFR_RNDN);
        mpfr_log(r48597, r48596, MPFR_RNDN);
        ;
        mpfr_set_si(r48599, mpfr_cmp(r48582, r48598) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r48601, r48600, r48591, MPFR_RNDN);
        mpfr_add(r48602, r48601, r48582, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48605, r48582, r48604, MPFR_RNDN);
        mpfr_mul(r48606, r48603, r48605, MPFR_RNDN);
        mpfr_sub(r48607, r48602, r48606, MPFR_RNDN);
        mpfr_add(r48608, r48582, r48582, MPFR_RNDN);
        mpfr_add(r48609, r48594, r48608, MPFR_RNDN);
        mpfr_sub(r48610, r48609, r48588, MPFR_RNDN);
        mpfr_log(r48611, r48610, MPFR_RNDN);
        if (mpfr_get_si(r48599, MPFR_RNDN)) { mpfr_set(r48612, r48607, MPFR_RNDN); } else { mpfr_set(r48612, r48611, MPFR_RNDN); };
        if (mpfr_get_si(r48584, MPFR_RNDN)) { mpfr_set(r48613, r48597, MPFR_RNDN); } else { mpfr_set(r48613, r48612, MPFR_RNDN); };
        return mpfr_get_d(r48613, MPFR_RNDN);
}

static mpfr_t r48614, r48615, r48616, r48617, r48618, r48619, r48620, r48621, r48622, r48623, r48624, r48625, r48626, r48627, r48628, r48629, r48630, r48631, r48632, r48633, r48634, r48635, r48636, r48637, r48638, r48639, r48640, r48641, r48642, r48643, r48644, r48645;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r48614);
        mpfr_init_set_str(r48615, "-1.0800267154469456", 10, MPFR_RNDN);
        mpfr_init(r48616);
        mpfr_init_set_str(r48617, "1/8", 10, MPFR_RNDN);
        mpfr_init(r48618);
        mpfr_init(r48619);
        mpfr_init(r48620);
        mpfr_init_set_str(r48621, "1/16", 10, MPFR_RNDN);
        mpfr_init_set_str(r48622, "5", 10, MPFR_RNDN);
        mpfr_init(r48623);
        mpfr_init(r48624);
        mpfr_init_set_str(r48625, "1/2", 10, MPFR_RNDN);
        mpfr_init(r48626);
        mpfr_init(r48627);
        mpfr_init(r48628);
        mpfr_init(r48629);
        mpfr_init_set_str(r48630, "0.95385117411035", 10, MPFR_RNDN);
        mpfr_init(r48631);
        mpfr_init_set_str(r48632, "3/40", 10, MPFR_RNDN);
        mpfr_init(r48633);
        mpfr_init(r48634);
        mpfr_init_set_str(r48635, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r48636, "3", 10, MPFR_RNDN);
        mpfr_init(r48637);
        mpfr_init(r48638);
        mpfr_init(r48639);
        mpfr_init(r48640);
        mpfr_init(r48641);
        mpfr_init(r48642);
        mpfr_init(r48643);
        mpfr_init(r48644);
        mpfr_init(r48645);
}

double f_dm(double x) {
        mpfr_set_d(r48614, x, MPFR_RNDN);
        ;
        mpfr_set_si(r48616, mpfr_cmp(r48614, r48615) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r48618, r48617, r48614, MPFR_RNDN);
        mpfr_mul(r48619, r48614, r48614, MPFR_RNDN);
        mpfr_div(r48620, r48618, r48619, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48623, r48614, r48622, MPFR_RNDN);
        mpfr_div(r48624, r48621, r48623, MPFR_RNDN);
        ;
        mpfr_div(r48626, r48625, r48614, MPFR_RNDN);
        mpfr_add(r48627, r48624, r48626, MPFR_RNDN);
        mpfr_sub(r48628, r48620, r48627, MPFR_RNDN);
        mpfr_log(r48629, r48628, MPFR_RNDN);
        ;
        mpfr_set_si(r48631, mpfr_cmp(r48614, r48630) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r48633, r48632, r48623, MPFR_RNDN);
        mpfr_add(r48634, r48633, r48614, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r48637, r48614, r48636, MPFR_RNDN);
        mpfr_mul(r48638, r48635, r48637, MPFR_RNDN);
        mpfr_sub(r48639, r48634, r48638, MPFR_RNDN);
        mpfr_add(r48640, r48614, r48614, MPFR_RNDN);
        mpfr_add(r48641, r48626, r48640, MPFR_RNDN);
        mpfr_sub(r48642, r48641, r48620, MPFR_RNDN);
        mpfr_log(r48643, r48642, MPFR_RNDN);
        if (mpfr_get_si(r48631, MPFR_RNDN)) { mpfr_set(r48644, r48639, MPFR_RNDN); } else { mpfr_set(r48644, r48643, MPFR_RNDN); };
        if (mpfr_get_si(r48616, MPFR_RNDN)) { mpfr_set(r48645, r48629, MPFR_RNDN); } else { mpfr_set(r48645, r48644, MPFR_RNDN); };
        return mpfr_get_d(r48645, MPFR_RNDN);
}

