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

char *name = "tanhf (example 3.4)";

double f_if(float x) {
        float r37498 = 1;
        float r37499 = x;
        float r37500 = cos(r37499);
        float r37501 = r37498 - r37500;
        float r37502 = sin(r37499);
        float r37503 = r37501 / r37502;
        return r37503;
}

double f_id(double x) {
        double r37504 = 1;
        double r37505 = x;
        double r37506 = cos(r37505);
        double r37507 = r37504 - r37506;
        double r37508 = sin(r37505);
        double r37509 = r37507 / r37508;
        return r37509;
}


double f_of(float x) {
        float r37510 = x;
        float r37511 = -3.979550813088296e-22;
        bool r37512 = r37510 <= r37511;
        float r37513 = sin(r37510);
        float r37514 = r37513 * r37513;
        float r37515 = 1;
        float r37516 = cos(r37510);
        float r37517 = r37515 + r37516;
        float r37518 = r37514 / r37517;
        float r37519 = r37518 / r37513;
        float r37520 = 0.802860764679358;
        bool r37521 = r37510 <= r37520;
        float r37522 = 1/24;
        float r37523 = 3;
        float r37524 = pow(r37510, r37523);
        float r37525 = r37522 * r37524;
        float r37526 = 1/240;
        float r37527 = 5;
        float r37528 = pow(r37510, r37527);
        float r37529 = r37526 * r37528;
        float r37530 = 1/2;
        float r37531 = r37530 * r37510;
        float r37532 = r37529 + r37531;
        float r37533 = r37525 + r37532;
        float r37534 = r37521 ? r37533 : r37519;
        float r37535 = r37512 ? r37519 : r37534;
        return r37535;
}

double f_od(double x) {
        double r37536 = x;
        double r37537 = -3.979550813088296e-22;
        bool r37538 = r37536 <= r37537;
        double r37539 = sin(r37536);
        double r37540 = r37539 * r37539;
        double r37541 = 1;
        double r37542 = cos(r37536);
        double r37543 = r37541 + r37542;
        double r37544 = r37540 / r37543;
        double r37545 = r37544 / r37539;
        double r37546 = 0.802860764679358;
        bool r37547 = r37536 <= r37546;
        double r37548 = 1/24;
        double r37549 = 3;
        double r37550 = pow(r37536, r37549);
        double r37551 = r37548 * r37550;
        double r37552 = 1/240;
        double r37553 = 5;
        double r37554 = pow(r37536, r37553);
        double r37555 = r37552 * r37554;
        double r37556 = 1/2;
        double r37557 = r37556 * r37536;
        double r37558 = r37555 + r37557;
        double r37559 = r37551 + r37558;
        double r37560 = r37547 ? r37559 : r37545;
        double r37561 = r37538 ? r37545 : r37560;
        return r37561;
}

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 r37562, r37563, r37564, r37565, r37566, r37567;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r37562, "1", 10, MPFR_RNDN);
        mpfr_init(r37563);
        mpfr_init(r37564);
        mpfr_init(r37565);
        mpfr_init(r37566);
        mpfr_init(r37567);
}

double f_im(double x) {
        ;
        mpfr_set_d(r37563, x, MPFR_RNDN);
        mpfr_cos(r37564, r37563, MPFR_RNDN);
        mpfr_sub(r37565, r37562, r37564, MPFR_RNDN);
        mpfr_sin(r37566, r37563, MPFR_RNDN);
        mpfr_div(r37567, r37565, r37566, MPFR_RNDN);
        return mpfr_get_d(r37567, MPFR_RNDN);
}

static mpfr_t r37568, r37569, r37570, r37571, r37572, r37573, r37574, r37575, r37576, r37577, r37578, r37579, r37580, r37581, r37582, r37583, r37584, r37585, r37586, r37587, r37588, r37589, r37590, r37591, r37592, r37593;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37568);
        mpfr_init_set_str(r37569, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r37570);
        mpfr_init(r37571);
        mpfr_init(r37572);
        mpfr_init_set_str(r37573, "1", 10, MPFR_RNDN);
        mpfr_init(r37574);
        mpfr_init(r37575);
        mpfr_init(r37576);
        mpfr_init(r37577);
        mpfr_init_set_str(r37578, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r37579);
        mpfr_init_set_str(r37580, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37581, "3", 10, MPFR_RNDN);
        mpfr_init(r37582);
        mpfr_init(r37583);
        mpfr_init_set_str(r37584, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37585, "5", 10, MPFR_RNDN);
        mpfr_init(r37586);
        mpfr_init(r37587);
        mpfr_init_set_str(r37588, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37589);
        mpfr_init(r37590);
        mpfr_init(r37591);
        mpfr_init(r37592);
        mpfr_init(r37593);
}

double f_fm(double x) {
        mpfr_set_d(r37568, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37570, mpfr_cmp(r37568, r37569) <= 0, MPFR_RNDN);
        mpfr_sin(r37571, r37568, MPFR_RNDN);
        mpfr_mul(r37572, r37571, r37571, MPFR_RNDN);
        ;
        mpfr_cos(r37574, r37568, MPFR_RNDN);
        mpfr_add(r37575, r37573, r37574, MPFR_RNDN);
        mpfr_div(r37576, r37572, r37575, MPFR_RNDN);
        mpfr_div(r37577, r37576, r37571, MPFR_RNDN);
        ;
        mpfr_set_si(r37579, mpfr_cmp(r37568, r37578) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37582, r37568, r37581, MPFR_RNDN);
        mpfr_mul(r37583, r37580, r37582, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37586, r37568, r37585, MPFR_RNDN);
        mpfr_mul(r37587, r37584, r37586, MPFR_RNDN);
        ;
        mpfr_mul(r37589, r37588, r37568, MPFR_RNDN);
        mpfr_add(r37590, r37587, r37589, MPFR_RNDN);
        mpfr_add(r37591, r37583, r37590, MPFR_RNDN);
        if (mpfr_get_si(r37579, MPFR_RNDN)) { mpfr_set(r37592, r37591, MPFR_RNDN); } else { mpfr_set(r37592, r37577, MPFR_RNDN); };
        if (mpfr_get_si(r37570, MPFR_RNDN)) { mpfr_set(r37593, r37577, MPFR_RNDN); } else { mpfr_set(r37593, r37592, MPFR_RNDN); };
        return mpfr_get_d(r37593, MPFR_RNDN);
}

static mpfr_t r37594, r37595, r37596, r37597, r37598, r37599, r37600, r37601, r37602, r37603, r37604, r37605, r37606, r37607, r37608, r37609, r37610, r37611, r37612, r37613, r37614, r37615, r37616, r37617, r37618, r37619;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37594);
        mpfr_init_set_str(r37595, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r37596);
        mpfr_init(r37597);
        mpfr_init(r37598);
        mpfr_init_set_str(r37599, "1", 10, MPFR_RNDN);
        mpfr_init(r37600);
        mpfr_init(r37601);
        mpfr_init(r37602);
        mpfr_init(r37603);
        mpfr_init_set_str(r37604, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r37605);
        mpfr_init_set_str(r37606, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37607, "3", 10, MPFR_RNDN);
        mpfr_init(r37608);
        mpfr_init(r37609);
        mpfr_init_set_str(r37610, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37611, "5", 10, MPFR_RNDN);
        mpfr_init(r37612);
        mpfr_init(r37613);
        mpfr_init_set_str(r37614, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37615);
        mpfr_init(r37616);
        mpfr_init(r37617);
        mpfr_init(r37618);
        mpfr_init(r37619);
}

double f_dm(double x) {
        mpfr_set_d(r37594, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37596, mpfr_cmp(r37594, r37595) <= 0, MPFR_RNDN);
        mpfr_sin(r37597, r37594, MPFR_RNDN);
        mpfr_mul(r37598, r37597, r37597, MPFR_RNDN);
        ;
        mpfr_cos(r37600, r37594, MPFR_RNDN);
        mpfr_add(r37601, r37599, r37600, MPFR_RNDN);
        mpfr_div(r37602, r37598, r37601, MPFR_RNDN);
        mpfr_div(r37603, r37602, r37597, MPFR_RNDN);
        ;
        mpfr_set_si(r37605, mpfr_cmp(r37594, r37604) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37608, r37594, r37607, MPFR_RNDN);
        mpfr_mul(r37609, r37606, r37608, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37612, r37594, r37611, MPFR_RNDN);
        mpfr_mul(r37613, r37610, r37612, MPFR_RNDN);
        ;
        mpfr_mul(r37615, r37614, r37594, MPFR_RNDN);
        mpfr_add(r37616, r37613, r37615, MPFR_RNDN);
        mpfr_add(r37617, r37609, r37616, MPFR_RNDN);
        if (mpfr_get_si(r37605, MPFR_RNDN)) { mpfr_set(r37618, r37617, MPFR_RNDN); } else { mpfr_set(r37618, r37603, MPFR_RNDN); };
        if (mpfr_get_si(r37596, MPFR_RNDN)) { mpfr_set(r37619, r37603, MPFR_RNDN); } else { mpfr_set(r37619, r37618, MPFR_RNDN); };
        return mpfr_get_d(r37619, MPFR_RNDN);
}

