#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 r31047 = x;
        float r31048 = exp(r31047);
        float r31049 = -r31047;
        float r31050 = exp(r31049);
        float r31051 = r31048 - r31050;
        float r31052 = 2;
        float r31053 = r31051 / r31052;
        return r31053;
}

double f_id(double x) {
        double r31054 = x;
        double r31055 = exp(r31054);
        double r31056 = -r31054;
        double r31057 = exp(r31056);
        double r31058 = r31055 - r31057;
        double r31059 = 2;
        double r31060 = r31058 / r31059;
        return r31060;
}


double f_of(float x) {
        float r31061 = 1/3;
        float r31062 = x;
        float r31063 = 3;
        float r31064 = pow(r31062, r31063);
        float r31065 = r31061 * r31064;
        float r31066 = 1/60;
        float r31067 = 5;
        float r31068 = pow(r31062, r31067);
        float r31069 = r31066 * r31068;
        float r31070 = 2;
        float r31071 = r31070 * r31062;
        float r31072 = r31069 + r31071;
        float r31073 = r31065 + r31072;
        float r31074 = r31073 / r31070;
        return r31074;
}

double f_od(double x) {
        double r31075 = 1/3;
        double r31076 = x;
        double r31077 = 3;
        double r31078 = pow(r31076, r31077);
        double r31079 = r31075 * r31078;
        double r31080 = 1/60;
        double r31081 = 5;
        double r31082 = pow(r31076, r31081);
        double r31083 = r31080 * r31082;
        double r31084 = 2;
        double r31085 = r31084 * r31076;
        double r31086 = r31083 + r31085;
        double r31087 = r31079 + r31086;
        double r31088 = r31087 / r31084;
        return r31088;
}

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 r31089, r31090, r31091, r31092, r31093, r31094, r31095;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r31089);
        mpfr_init(r31090);
        mpfr_init(r31091);
        mpfr_init(r31092);
        mpfr_init(r31093);
        mpfr_init_set_str(r31094, "2", 10, MPFR_RNDN);
        mpfr_init(r31095);
}

double f_im(double x) {
        mpfr_set_d(r31089, x, MPFR_RNDN);
        mpfr_exp(r31090, r31089, MPFR_RNDN);
        mpfr_neg(r31091, r31089, MPFR_RNDN);
        mpfr_exp(r31092, r31091, MPFR_RNDN);
        mpfr_sub(r31093, r31090, r31092, MPFR_RNDN);
        ;
        mpfr_div(r31095, r31093, r31094, MPFR_RNDN);
        return mpfr_get_d(r31095, MPFR_RNDN);
}

static mpfr_t r31096, r31097, r31098, r31099, r31100, r31101, r31102, r31103, r31104, r31105, r31106, r31107, r31108, r31109;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r31096, "1/3", 10, MPFR_RNDN);
        mpfr_init(r31097);
        mpfr_init_set_str(r31098, "3", 10, MPFR_RNDN);
        mpfr_init(r31099);
        mpfr_init(r31100);
        mpfr_init_set_str(r31101, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r31102, "5", 10, MPFR_RNDN);
        mpfr_init(r31103);
        mpfr_init(r31104);
        mpfr_init_set_str(r31105, "2", 10, MPFR_RNDN);
        mpfr_init(r31106);
        mpfr_init(r31107);
        mpfr_init(r31108);
        mpfr_init(r31109);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r31097, x, MPFR_RNDN);
        ;
        mpfr_pow(r31099, r31097, r31098, MPFR_RNDN);
        mpfr_mul(r31100, r31096, r31099, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r31103, r31097, r31102, MPFR_RNDN);
        mpfr_mul(r31104, r31101, r31103, MPFR_RNDN);
        ;
        mpfr_mul(r31106, r31105, r31097, MPFR_RNDN);
        mpfr_add(r31107, r31104, r31106, MPFR_RNDN);
        mpfr_add(r31108, r31100, r31107, MPFR_RNDN);
        mpfr_div(r31109, r31108, r31105, MPFR_RNDN);
        return mpfr_get_d(r31109, MPFR_RNDN);
}

static mpfr_t r31110, r31111, r31112, r31113, r31114, r31115, r31116, r31117, r31118, r31119, r31120, r31121, r31122, r31123;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r31110, "1/3", 10, MPFR_RNDN);
        mpfr_init(r31111);
        mpfr_init_set_str(r31112, "3", 10, MPFR_RNDN);
        mpfr_init(r31113);
        mpfr_init(r31114);
        mpfr_init_set_str(r31115, "1/60", 10, MPFR_RNDN);
        mpfr_init_set_str(r31116, "5", 10, MPFR_RNDN);
        mpfr_init(r31117);
        mpfr_init(r31118);
        mpfr_init_set_str(r31119, "2", 10, MPFR_RNDN);
        mpfr_init(r31120);
        mpfr_init(r31121);
        mpfr_init(r31122);
        mpfr_init(r31123);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r31111, x, MPFR_RNDN);
        ;
        mpfr_pow(r31113, r31111, r31112, MPFR_RNDN);
        mpfr_mul(r31114, r31110, r31113, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r31117, r31111, r31116, MPFR_RNDN);
        mpfr_mul(r31118, r31115, r31117, MPFR_RNDN);
        ;
        mpfr_mul(r31120, r31119, r31111, MPFR_RNDN);
        mpfr_add(r31121, r31118, r31120, MPFR_RNDN);
        mpfr_add(r31122, r31114, r31121, MPFR_RNDN);
        mpfr_div(r31123, r31122, r31119, MPFR_RNDN);
        return mpfr_get_d(r31123, MPFR_RNDN);
}

