#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 r21544 = x;
        float r21545 = r21544 * r21544;
        float r21546 = 1;
        float r21547 = r21545 + r21546;
        float r21548 = sqrt(r21547);
        float r21549 = r21544 + r21548;
        float r21550 = log(r21549);
        return r21550;
}

double f_id(double x) {
        double r21551 = x;
        double r21552 = r21551 * r21551;
        double r21553 = 1;
        double r21554 = r21552 + r21553;
        double r21555 = sqrt(r21554);
        double r21556 = r21551 + r21555;
        double r21557 = log(r21556);
        return r21557;
}


double f_of(float x) {
        float r21558 = x;
        float r21559 = -1.1846393274355784;
        bool r21560 = r21558 <= r21559;
        float r21561 = 1/8;
        float r21562 = r21561 / r21558;
        float r21563 = r21558 * r21558;
        float r21564 = r21562 / r21563;
        float r21565 = 1/16;
        float r21566 = 5;
        float r21567 = pow(r21558, r21566);
        float r21568 = r21565 / r21567;
        float r21569 = 1/2;
        float r21570 = r21569 / r21558;
        float r21571 = r21568 + r21570;
        float r21572 = r21564 - r21571;
        float r21573 = log(r21572);
        float r21574 = 0.9131218939407697;
        bool r21575 = r21558 <= r21574;
        float r21576 = 3/40;
        float r21577 = r21576 * r21567;
        float r21578 = r21577 + r21558;
        float r21579 = 1/6;
        float r21580 = 3;
        float r21581 = pow(r21558, r21580);
        float r21582 = r21579 * r21581;
        float r21583 = r21578 - r21582;
        float r21584 = r21558 + r21558;
        float r21585 = r21570 + r21584;
        float r21586 = r21585 - r21564;
        float r21587 = log(r21586);
        float r21588 = r21575 ? r21583 : r21587;
        float r21589 = r21560 ? r21573 : r21588;
        return r21589;
}

double f_od(double x) {
        double r21590 = x;
        double r21591 = -1.1846393274355784;
        bool r21592 = r21590 <= r21591;
        double r21593 = 1/8;
        double r21594 = r21593 / r21590;
        double r21595 = r21590 * r21590;
        double r21596 = r21594 / r21595;
        double r21597 = 1/16;
        double r21598 = 5;
        double r21599 = pow(r21590, r21598);
        double r21600 = r21597 / r21599;
        double r21601 = 1/2;
        double r21602 = r21601 / r21590;
        double r21603 = r21600 + r21602;
        double r21604 = r21596 - r21603;
        double r21605 = log(r21604);
        double r21606 = 0.9131218939407697;
        bool r21607 = r21590 <= r21606;
        double r21608 = 3/40;
        double r21609 = r21608 * r21599;
        double r21610 = r21609 + r21590;
        double r21611 = 1/6;
        double r21612 = 3;
        double r21613 = pow(r21590, r21612);
        double r21614 = r21611 * r21613;
        double r21615 = r21610 - r21614;
        double r21616 = r21590 + r21590;
        double r21617 = r21602 + r21616;
        double r21618 = r21617 - r21596;
        double r21619 = log(r21618);
        double r21620 = r21607 ? r21615 : r21619;
        double r21621 = r21592 ? r21605 : r21620;
        return r21621;
}

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 r21622, r21623, r21624, r21625, r21626, r21627, r21628;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21622);
        mpfr_init(r21623);
        mpfr_init_set_str(r21624, "1", 10, MPFR_RNDN);
        mpfr_init(r21625);
        mpfr_init(r21626);
        mpfr_init(r21627);
        mpfr_init(r21628);
}

double f_im(double x) {
        mpfr_set_d(r21622, x, MPFR_RNDN);
        mpfr_mul(r21623, r21622, r21622, MPFR_RNDN);
        ;
        mpfr_add(r21625, r21623, r21624, MPFR_RNDN);
        mpfr_sqrt(r21626, r21625, MPFR_RNDN);
        mpfr_add(r21627, r21622, r21626, MPFR_RNDN);
        mpfr_log(r21628, r21627, MPFR_RNDN);
        return mpfr_get_d(r21628, MPFR_RNDN);
}

static mpfr_t r21629, r21630, r21631, r21632, r21633, r21634, r21635, r21636, r21637, r21638, r21639, r21640, r21641, r21642, r21643, r21644, r21645, r21646, r21647, r21648, r21649, r21650, r21651, r21652, r21653, r21654, r21655, r21656, r21657, r21658, r21659, r21660;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21629);
        mpfr_init_set_str(r21630, "-1.1846393274355784", 10, MPFR_RNDN);
        mpfr_init(r21631);
        mpfr_init_set_str(r21632, "1/8", 10, MPFR_RNDN);
        mpfr_init(r21633);
        mpfr_init(r21634);
        mpfr_init(r21635);
        mpfr_init_set_str(r21636, "1/16", 10, MPFR_RNDN);
        mpfr_init_set_str(r21637, "5", 10, MPFR_RNDN);
        mpfr_init(r21638);
        mpfr_init(r21639);
        mpfr_init_set_str(r21640, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21641);
        mpfr_init(r21642);
        mpfr_init(r21643);
        mpfr_init(r21644);
        mpfr_init_set_str(r21645, "0.9131218939407697", 10, MPFR_RNDN);
        mpfr_init(r21646);
        mpfr_init_set_str(r21647, "3/40", 10, MPFR_RNDN);
        mpfr_init(r21648);
        mpfr_init(r21649);
        mpfr_init_set_str(r21650, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r21651, "3", 10, MPFR_RNDN);
        mpfr_init(r21652);
        mpfr_init(r21653);
        mpfr_init(r21654);
        mpfr_init(r21655);
        mpfr_init(r21656);
        mpfr_init(r21657);
        mpfr_init(r21658);
        mpfr_init(r21659);
        mpfr_init(r21660);
}

double f_fm(double x) {
        mpfr_set_d(r21629, x, MPFR_RNDN);
        ;
        mpfr_set_si(r21631, mpfr_cmp(r21629, r21630) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r21633, r21632, r21629, MPFR_RNDN);
        mpfr_mul(r21634, r21629, r21629, MPFR_RNDN);
        mpfr_div(r21635, r21633, r21634, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r21638, r21629, r21637, MPFR_RNDN);
        mpfr_div(r21639, r21636, r21638, MPFR_RNDN);
        ;
        mpfr_div(r21641, r21640, r21629, MPFR_RNDN);
        mpfr_add(r21642, r21639, r21641, MPFR_RNDN);
        mpfr_sub(r21643, r21635, r21642, MPFR_RNDN);
        mpfr_log(r21644, r21643, MPFR_RNDN);
        ;
        mpfr_set_si(r21646, mpfr_cmp(r21629, r21645) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r21648, r21647, r21638, MPFR_RNDN);
        mpfr_add(r21649, r21648, r21629, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r21652, r21629, r21651, MPFR_RNDN);
        mpfr_mul(r21653, r21650, r21652, MPFR_RNDN);
        mpfr_sub(r21654, r21649, r21653, MPFR_RNDN);
        mpfr_add(r21655, r21629, r21629, MPFR_RNDN);
        mpfr_add(r21656, r21641, r21655, MPFR_RNDN);
        mpfr_sub(r21657, r21656, r21635, MPFR_RNDN);
        mpfr_log(r21658, r21657, MPFR_RNDN);
        if (mpfr_get_si(r21646, MPFR_RNDN)) { mpfr_set(r21659, r21654, MPFR_RNDN); } else { mpfr_set(r21659, r21658, MPFR_RNDN); };
        if (mpfr_get_si(r21631, MPFR_RNDN)) { mpfr_set(r21660, r21644, MPFR_RNDN); } else { mpfr_set(r21660, r21659, MPFR_RNDN); };
        return mpfr_get_d(r21660, MPFR_RNDN);
}

static mpfr_t r21661, r21662, r21663, r21664, r21665, r21666, r21667, r21668, r21669, r21670, r21671, r21672, r21673, r21674, r21675, r21676, r21677, r21678, r21679, r21680, r21681, r21682, r21683, r21684, r21685, r21686, r21687, r21688, r21689, r21690, r21691, r21692;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r21661);
        mpfr_init_set_str(r21662, "-1.1846393274355784", 10, MPFR_RNDN);
        mpfr_init(r21663);
        mpfr_init_set_str(r21664, "1/8", 10, MPFR_RNDN);
        mpfr_init(r21665);
        mpfr_init(r21666);
        mpfr_init(r21667);
        mpfr_init_set_str(r21668, "1/16", 10, MPFR_RNDN);
        mpfr_init_set_str(r21669, "5", 10, MPFR_RNDN);
        mpfr_init(r21670);
        mpfr_init(r21671);
        mpfr_init_set_str(r21672, "1/2", 10, MPFR_RNDN);
        mpfr_init(r21673);
        mpfr_init(r21674);
        mpfr_init(r21675);
        mpfr_init(r21676);
        mpfr_init_set_str(r21677, "0.9131218939407697", 10, MPFR_RNDN);
        mpfr_init(r21678);
        mpfr_init_set_str(r21679, "3/40", 10, MPFR_RNDN);
        mpfr_init(r21680);
        mpfr_init(r21681);
        mpfr_init_set_str(r21682, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r21683, "3", 10, MPFR_RNDN);
        mpfr_init(r21684);
        mpfr_init(r21685);
        mpfr_init(r21686);
        mpfr_init(r21687);
        mpfr_init(r21688);
        mpfr_init(r21689);
        mpfr_init(r21690);
        mpfr_init(r21691);
        mpfr_init(r21692);
}

double f_dm(double x) {
        mpfr_set_d(r21661, x, MPFR_RNDN);
        ;
        mpfr_set_si(r21663, mpfr_cmp(r21661, r21662) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r21665, r21664, r21661, MPFR_RNDN);
        mpfr_mul(r21666, r21661, r21661, MPFR_RNDN);
        mpfr_div(r21667, r21665, r21666, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r21670, r21661, r21669, MPFR_RNDN);
        mpfr_div(r21671, r21668, r21670, MPFR_RNDN);
        ;
        mpfr_div(r21673, r21672, r21661, MPFR_RNDN);
        mpfr_add(r21674, r21671, r21673, MPFR_RNDN);
        mpfr_sub(r21675, r21667, r21674, MPFR_RNDN);
        mpfr_log(r21676, r21675, MPFR_RNDN);
        ;
        mpfr_set_si(r21678, mpfr_cmp(r21661, r21677) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r21680, r21679, r21670, MPFR_RNDN);
        mpfr_add(r21681, r21680, r21661, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r21684, r21661, r21683, MPFR_RNDN);
        mpfr_mul(r21685, r21682, r21684, MPFR_RNDN);
        mpfr_sub(r21686, r21681, r21685, MPFR_RNDN);
        mpfr_add(r21687, r21661, r21661, MPFR_RNDN);
        mpfr_add(r21688, r21673, r21687, MPFR_RNDN);
        mpfr_sub(r21689, r21688, r21667, MPFR_RNDN);
        mpfr_log(r21690, r21689, MPFR_RNDN);
        if (mpfr_get_si(r21678, MPFR_RNDN)) { mpfr_set(r21691, r21686, MPFR_RNDN); } else { mpfr_set(r21691, r21690, MPFR_RNDN); };
        if (mpfr_get_si(r21663, MPFR_RNDN)) { mpfr_set(r21692, r21676, MPFR_RNDN); } else { mpfr_set(r21692, r21691, MPFR_RNDN); };
        return mpfr_get_d(r21692, MPFR_RNDN);
}

