#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 r27417 = x;
        float r27418 = r27417 * r27417;
        float r27419 = 1;
        float r27420 = r27418 + r27419;
        float r27421 = sqrt(r27420);
        float r27422 = r27417 + r27421;
        float r27423 = log(r27422);
        return r27423;
}

double f_id(double x) {
        double r27424 = x;
        double r27425 = r27424 * r27424;
        double r27426 = 1;
        double r27427 = r27425 + r27426;
        double r27428 = sqrt(r27427);
        double r27429 = r27424 + r27428;
        double r27430 = log(r27429);
        return r27430;
}


double f_of(float x) {
        float r27431 = x;
        float r27432 = -1.0916759748291127;
        bool r27433 = r27431 <= r27432;
        float r27434 = 1/8;
        float r27435 = r27434 / r27431;
        float r27436 = r27431 * r27431;
        float r27437 = r27435 / r27436;
        float r27438 = 1/2;
        float r27439 = r27438 / r27431;
        float r27440 = r27437 - r27439;
        float r27441 = 1/16;
        float r27442 = 5;
        float r27443 = pow(r27431, r27442);
        float r27444 = r27441 / r27443;
        float r27445 = r27440 - r27444;
        float r27446 = log(r27445);
        float r27447 = 0.8414355766160173;
        bool r27448 = r27431 <= r27447;
        float r27449 = 3/40;
        float r27450 = r27449 * r27443;
        float r27451 = r27450 + r27431;
        float r27452 = 1/6;
        float r27453 = 3;
        float r27454 = pow(r27431, r27453);
        float r27455 = r27452 * r27454;
        float r27456 = r27451 - r27455;
        float r27457 = 2;
        float r27458 = r27431 * r27457;
        float r27459 = r27439 + r27458;
        float r27460 = r27459 - r27437;
        float r27461 = log(r27460);
        float r27462 = r27448 ? r27456 : r27461;
        float r27463 = r27433 ? r27446 : r27462;
        return r27463;
}

double f_od(double x) {
        double r27464 = x;
        double r27465 = -1.0916759748291127;
        bool r27466 = r27464 <= r27465;
        double r27467 = 1/8;
        double r27468 = r27467 / r27464;
        double r27469 = r27464 * r27464;
        double r27470 = r27468 / r27469;
        double r27471 = 1/2;
        double r27472 = r27471 / r27464;
        double r27473 = r27470 - r27472;
        double r27474 = 1/16;
        double r27475 = 5;
        double r27476 = pow(r27464, r27475);
        double r27477 = r27474 / r27476;
        double r27478 = r27473 - r27477;
        double r27479 = log(r27478);
        double r27480 = 0.8414355766160173;
        bool r27481 = r27464 <= r27480;
        double r27482 = 3/40;
        double r27483 = r27482 * r27476;
        double r27484 = r27483 + r27464;
        double r27485 = 1/6;
        double r27486 = 3;
        double r27487 = pow(r27464, r27486);
        double r27488 = r27485 * r27487;
        double r27489 = r27484 - r27488;
        double r27490 = 2;
        double r27491 = r27464 * r27490;
        double r27492 = r27472 + r27491;
        double r27493 = r27492 - r27470;
        double r27494 = log(r27493);
        double r27495 = r27481 ? r27489 : r27494;
        double r27496 = r27466 ? r27479 : r27495;
        return r27496;
}

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 r27497, r27498, r27499, r27500, r27501, r27502, r27503;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27497);
        mpfr_init(r27498);
        mpfr_init_set_str(r27499, "1", 10, MPFR_RNDN);
        mpfr_init(r27500);
        mpfr_init(r27501);
        mpfr_init(r27502);
        mpfr_init(r27503);
}

double f_im(double x) {
        mpfr_set_d(r27497, x, MPFR_RNDN);
        mpfr_mul(r27498, r27497, r27497, MPFR_RNDN);
        ;
        mpfr_add(r27500, r27498, r27499, MPFR_RNDN);
        mpfr_sqrt(r27501, r27500, MPFR_RNDN);
        mpfr_add(r27502, r27497, r27501, MPFR_RNDN);
        mpfr_log(r27503, r27502, MPFR_RNDN);
        return mpfr_get_d(r27503, MPFR_RNDN);
}

static mpfr_t r27504, r27505, r27506, r27507, r27508, r27509, r27510, r27511, r27512, r27513, r27514, r27515, r27516, r27517, r27518, r27519, r27520, r27521, r27522, r27523, r27524, r27525, r27526, r27527, r27528, r27529, r27530, r27531, r27532, r27533, r27534, r27535, r27536;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27504);
        mpfr_init_set_str(r27505, "-1.0916759748291127", 10, MPFR_RNDN);
        mpfr_init(r27506);
        mpfr_init_set_str(r27507, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27508);
        mpfr_init(r27509);
        mpfr_init(r27510);
        mpfr_init_set_str(r27511, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27512);
        mpfr_init(r27513);
        mpfr_init_set_str(r27514, "1/16", 10, MPFR_RNDN);
        mpfr_init_set_str(r27515, "5", 10, MPFR_RNDN);
        mpfr_init(r27516);
        mpfr_init(r27517);
        mpfr_init(r27518);
        mpfr_init(r27519);
        mpfr_init_set_str(r27520, "0.8414355766160173", 10, MPFR_RNDN);
        mpfr_init(r27521);
        mpfr_init_set_str(r27522, "3/40", 10, MPFR_RNDN);
        mpfr_init(r27523);
        mpfr_init(r27524);
        mpfr_init_set_str(r27525, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r27526, "3", 10, MPFR_RNDN);
        mpfr_init(r27527);
        mpfr_init(r27528);
        mpfr_init(r27529);
        mpfr_init_set_str(r27530, "2", 10, MPFR_RNDN);
        mpfr_init(r27531);
        mpfr_init(r27532);
        mpfr_init(r27533);
        mpfr_init(r27534);
        mpfr_init(r27535);
        mpfr_init(r27536);
}

double f_fm(double x) {
        mpfr_set_d(r27504, x, MPFR_RNDN);
        ;
        mpfr_set_si(r27506, mpfr_cmp(r27504, r27505) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27508, r27507, r27504, MPFR_RNDN);
        mpfr_mul(r27509, r27504, r27504, MPFR_RNDN);
        mpfr_div(r27510, r27508, r27509, MPFR_RNDN);
        ;
        mpfr_div(r27512, r27511, r27504, MPFR_RNDN);
        mpfr_sub(r27513, r27510, r27512, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27516, r27504, r27515, MPFR_RNDN);
        mpfr_div(r27517, r27514, r27516, MPFR_RNDN);
        mpfr_sub(r27518, r27513, r27517, MPFR_RNDN);
        mpfr_log(r27519, r27518, MPFR_RNDN);
        ;
        mpfr_set_si(r27521, mpfr_cmp(r27504, r27520) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27523, r27522, r27516, MPFR_RNDN);
        mpfr_add(r27524, r27523, r27504, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27527, r27504, r27526, MPFR_RNDN);
        mpfr_mul(r27528, r27525, r27527, MPFR_RNDN);
        mpfr_sub(r27529, r27524, r27528, MPFR_RNDN);
        ;
        mpfr_mul(r27531, r27504, r27530, MPFR_RNDN);
        mpfr_add(r27532, r27512, r27531, MPFR_RNDN);
        mpfr_sub(r27533, r27532, r27510, MPFR_RNDN);
        mpfr_log(r27534, r27533, MPFR_RNDN);
        if (mpfr_get_si(r27521, MPFR_RNDN)) { mpfr_set(r27535, r27529, MPFR_RNDN); } else { mpfr_set(r27535, r27534, MPFR_RNDN); };
        if (mpfr_get_si(r27506, MPFR_RNDN)) { mpfr_set(r27536, r27519, MPFR_RNDN); } else { mpfr_set(r27536, r27535, MPFR_RNDN); };
        return mpfr_get_d(r27536, MPFR_RNDN);
}

static mpfr_t r27537, r27538, r27539, r27540, r27541, r27542, r27543, r27544, r27545, r27546, r27547, r27548, r27549, r27550, r27551, r27552, r27553, r27554, r27555, r27556, r27557, r27558, r27559, r27560, r27561, r27562, r27563, r27564, r27565, r27566, r27567, r27568, r27569;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r27537);
        mpfr_init_set_str(r27538, "-1.0916759748291127", 10, MPFR_RNDN);
        mpfr_init(r27539);
        mpfr_init_set_str(r27540, "1/8", 10, MPFR_RNDN);
        mpfr_init(r27541);
        mpfr_init(r27542);
        mpfr_init(r27543);
        mpfr_init_set_str(r27544, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27545);
        mpfr_init(r27546);
        mpfr_init_set_str(r27547, "1/16", 10, MPFR_RNDN);
        mpfr_init_set_str(r27548, "5", 10, MPFR_RNDN);
        mpfr_init(r27549);
        mpfr_init(r27550);
        mpfr_init(r27551);
        mpfr_init(r27552);
        mpfr_init_set_str(r27553, "0.8414355766160173", 10, MPFR_RNDN);
        mpfr_init(r27554);
        mpfr_init_set_str(r27555, "3/40", 10, MPFR_RNDN);
        mpfr_init(r27556);
        mpfr_init(r27557);
        mpfr_init_set_str(r27558, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r27559, "3", 10, MPFR_RNDN);
        mpfr_init(r27560);
        mpfr_init(r27561);
        mpfr_init(r27562);
        mpfr_init_set_str(r27563, "2", 10, MPFR_RNDN);
        mpfr_init(r27564);
        mpfr_init(r27565);
        mpfr_init(r27566);
        mpfr_init(r27567);
        mpfr_init(r27568);
        mpfr_init(r27569);
}

double f_dm(double x) {
        mpfr_set_d(r27537, x, MPFR_RNDN);
        ;
        mpfr_set_si(r27539, mpfr_cmp(r27537, r27538) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r27541, r27540, r27537, MPFR_RNDN);
        mpfr_mul(r27542, r27537, r27537, MPFR_RNDN);
        mpfr_div(r27543, r27541, r27542, MPFR_RNDN);
        ;
        mpfr_div(r27545, r27544, r27537, MPFR_RNDN);
        mpfr_sub(r27546, r27543, r27545, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27549, r27537, r27548, MPFR_RNDN);
        mpfr_div(r27550, r27547, r27549, MPFR_RNDN);
        mpfr_sub(r27551, r27546, r27550, MPFR_RNDN);
        mpfr_log(r27552, r27551, MPFR_RNDN);
        ;
        mpfr_set_si(r27554, mpfr_cmp(r27537, r27553) <= 0, MPFR_RNDN);
        ;
        mpfr_mul(r27556, r27555, r27549, MPFR_RNDN);
        mpfr_add(r27557, r27556, r27537, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r27560, r27537, r27559, MPFR_RNDN);
        mpfr_mul(r27561, r27558, r27560, MPFR_RNDN);
        mpfr_sub(r27562, r27557, r27561, MPFR_RNDN);
        ;
        mpfr_mul(r27564, r27537, r27563, MPFR_RNDN);
        mpfr_add(r27565, r27545, r27564, MPFR_RNDN);
        mpfr_sub(r27566, r27565, r27543, MPFR_RNDN);
        mpfr_log(r27567, r27566, MPFR_RNDN);
        if (mpfr_get_si(r27554, MPFR_RNDN)) { mpfr_set(r27568, r27562, MPFR_RNDN); } else { mpfr_set(r27568, r27567, MPFR_RNDN); };
        if (mpfr_get_si(r27539, MPFR_RNDN)) { mpfr_set(r27569, r27552, MPFR_RNDN); } else { mpfr_set(r27569, r27568, MPFR_RNDN); };
        return mpfr_get_d(r27569, MPFR_RNDN);
}

