#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Hyperbolic sine";

double f_if(float x) {
        float r22517 = x;
        float r22518 = exp(r22517);
        float r22519 = -r22517;
        float r22520 = exp(r22519);
        float r22521 = r22518 - r22520;
        float r22522 = 2;
        float r22523 = r22521 / r22522;
        return r22523;
}

double f_id(double x) {
        double r22524 = x;
        double r22525 = exp(r22524);
        double r22526 = -r22524;
        double r22527 = exp(r22526);
        double r22528 = r22525 - r22527;
        double r22529 = 2;
        double r22530 = r22528 / r22529;
        return r22530;
}


double f_of(float x) {
        float r22531 = x;
        float r22532 = 4;
        float r22533 = pow(r22531, r22532);
        float r22534 = 1/120;
        float r22535 = 2;
        float r22536 = r22534 * r22535;
        float r22537 = fma(r22533, r22536, r22535);
        float r22538 = r22531 * r22537;
        float r22539 = 1/6;
        float r22540 = r22535 * r22539;
        float r22541 = 3;
        float r22542 = pow(r22531, r22541);
        float r22543 = r22540 * r22542;
        float r22544 = r22538 + r22543;
        float r22545 = r22544 / r22535;
        return r22545;
}

double f_od(double x) {
        double r22546 = x;
        double r22547 = 4;
        double r22548 = pow(r22546, r22547);
        double r22549 = 1/120;
        double r22550 = 2;
        double r22551 = r22549 * r22550;
        double r22552 = fma(r22548, r22551, r22550);
        double r22553 = r22546 * r22552;
        double r22554 = 1/6;
        double r22555 = r22550 * r22554;
        double r22556 = 3;
        double r22557 = pow(r22546, r22556);
        double r22558 = r22555 * r22557;
        double r22559 = r22553 + r22558;
        double r22560 = r22559 / r22550;
        return r22560;
}

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 r22561, r22562, r22563, r22564, r22565, r22566, r22567;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r22561);
        mpfr_init(r22562);
        mpfr_init(r22563);
        mpfr_init(r22564);
        mpfr_init(r22565);
        mpfr_init_set_str(r22566, "2", 10, MPFR_RNDN);
        mpfr_init(r22567);
}

double f_im(double x) {
        mpfr_set_d(r22561, x, MPFR_RNDN);
        mpfr_exp(r22562, r22561, MPFR_RNDN);
        mpfr_neg(r22563, r22561, MPFR_RNDN);
        mpfr_exp(r22564, r22563, MPFR_RNDN);
        mpfr_sub(r22565, r22562, r22564, MPFR_RNDN);
        ;
        mpfr_div(r22567, r22565, r22566, MPFR_RNDN);
        return mpfr_get_d(r22567, MPFR_RNDN);
}

static mpfr_t r22568, r22569, r22570, r22571, r22572, r22573, r22574, r22575, r22576, r22577, r22578, r22579, r22580, r22581, r22582;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r22568);
        mpfr_init_set_str(r22569, "4", 10, MPFR_RNDN);
        mpfr_init(r22570);
        mpfr_init_set_str(r22571, "1/120", 10, MPFR_RNDN);
        mpfr_init_set_str(r22572, "2", 10, MPFR_RNDN);
        mpfr_init(r22573);
        mpfr_init(r22574);
        mpfr_init(r22575);
        mpfr_init_set_str(r22576, "1/6", 10, MPFR_RNDN);
        mpfr_init(r22577);
        mpfr_init_set_str(r22578, "3", 10, MPFR_RNDN);
        mpfr_init(r22579);
        mpfr_init(r22580);
        mpfr_init(r22581);
        mpfr_init(r22582);
}

double f_fm(double x) {
        mpfr_set_d(r22568, x, MPFR_RNDN);
        ;
        mpfr_pow(r22570, r22568, r22569, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r22573, r22571, r22572, MPFR_RNDN);
        mpfr_fma(r22574, r22570, r22573, r22572, MPFR_RNDN);
        mpfr_mul(r22575, r22568, r22574, MPFR_RNDN);
        ;
        mpfr_mul(r22577, r22572, r22576, MPFR_RNDN);
        ;
        mpfr_pow(r22579, r22568, r22578, MPFR_RNDN);
        mpfr_mul(r22580, r22577, r22579, MPFR_RNDN);
        mpfr_add(r22581, r22575, r22580, MPFR_RNDN);
        mpfr_div(r22582, r22581, r22572, MPFR_RNDN);
        return mpfr_get_d(r22582, MPFR_RNDN);
}

static mpfr_t r22583, r22584, r22585, r22586, r22587, r22588, r22589, r22590, r22591, r22592, r22593, r22594, r22595, r22596, r22597;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r22583);
        mpfr_init_set_str(r22584, "4", 10, MPFR_RNDN);
        mpfr_init(r22585);
        mpfr_init_set_str(r22586, "1/120", 10, MPFR_RNDN);
        mpfr_init_set_str(r22587, "2", 10, MPFR_RNDN);
        mpfr_init(r22588);
        mpfr_init(r22589);
        mpfr_init(r22590);
        mpfr_init_set_str(r22591, "1/6", 10, MPFR_RNDN);
        mpfr_init(r22592);
        mpfr_init_set_str(r22593, "3", 10, MPFR_RNDN);
        mpfr_init(r22594);
        mpfr_init(r22595);
        mpfr_init(r22596);
        mpfr_init(r22597);
}

double f_dm(double x) {
        mpfr_set_d(r22583, x, MPFR_RNDN);
        ;
        mpfr_pow(r22585, r22583, r22584, MPFR_RNDN);
        ;
        ;
        mpfr_mul(r22588, r22586, r22587, MPFR_RNDN);
        mpfr_fma(r22589, r22585, r22588, r22587, MPFR_RNDN);
        mpfr_mul(r22590, r22583, r22589, MPFR_RNDN);
        ;
        mpfr_mul(r22592, r22587, r22591, MPFR_RNDN);
        ;
        mpfr_pow(r22594, r22583, r22593, MPFR_RNDN);
        mpfr_mul(r22595, r22592, r22594, MPFR_RNDN);
        mpfr_add(r22596, r22590, r22595, MPFR_RNDN);
        mpfr_div(r22597, r22596, r22587, MPFR_RNDN);
        return mpfr_get_d(r22597, MPFR_RNDN);
}

