#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 r37420 = 1;
        float r37421 = x;
        float r37422 = cos(r37421);
        float r37423 = r37420 - r37422;
        float r37424 = sin(r37421);
        float r37425 = r37423 / r37424;
        return r37425;
}

double f_id(double x) {
        double r37426 = 1;
        double r37427 = x;
        double r37428 = cos(r37427);
        double r37429 = r37426 - r37428;
        double r37430 = sin(r37427);
        double r37431 = r37429 / r37430;
        return r37431;
}


double f_of(float x) {
        float r37432 = x;
        float r37433 = -0.00838508057884762;
        bool r37434 = r37432 <= r37433;
        float r37435 = sin(r37432);
        float r37436 = r37435 * r37435;
        float r37437 = 1;
        float r37438 = cos(r37432);
        float r37439 = r37437 + r37438;
        float r37440 = r37436 / r37439;
        float r37441 = r37440 / r37435;
        float r37442 = 0.006272349724070426;
        bool r37443 = r37432 <= r37442;
        float r37444 = 1/24;
        float r37445 = 3;
        float r37446 = pow(r37432, r37445);
        float r37447 = r37444 * r37446;
        float r37448 = 1/240;
        float r37449 = 5;
        float r37450 = pow(r37432, r37449);
        float r37451 = r37448 * r37450;
        float r37452 = 1/2;
        float r37453 = r37452 * r37432;
        float r37454 = r37451 + r37453;
        float r37455 = r37447 + r37454;
        float r37456 = r37443 ? r37455 : r37441;
        float r37457 = r37434 ? r37441 : r37456;
        return r37457;
}

double f_od(double x) {
        double r37458 = x;
        double r37459 = -0.00838508057884762;
        bool r37460 = r37458 <= r37459;
        double r37461 = sin(r37458);
        double r37462 = r37461 * r37461;
        double r37463 = 1;
        double r37464 = cos(r37458);
        double r37465 = r37463 + r37464;
        double r37466 = r37462 / r37465;
        double r37467 = r37466 / r37461;
        double r37468 = 0.006272349724070426;
        bool r37469 = r37458 <= r37468;
        double r37470 = 1/24;
        double r37471 = 3;
        double r37472 = pow(r37458, r37471);
        double r37473 = r37470 * r37472;
        double r37474 = 1/240;
        double r37475 = 5;
        double r37476 = pow(r37458, r37475);
        double r37477 = r37474 * r37476;
        double r37478 = 1/2;
        double r37479 = r37478 * r37458;
        double r37480 = r37477 + r37479;
        double r37481 = r37473 + r37480;
        double r37482 = r37469 ? r37481 : r37467;
        double r37483 = r37460 ? r37467 : r37482;
        return r37483;
}

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 r37484, r37485, r37486, r37487, r37488, r37489;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r37484, "1", 10, MPFR_RNDN);
        mpfr_init(r37485);
        mpfr_init(r37486);
        mpfr_init(r37487);
        mpfr_init(r37488);
        mpfr_init(r37489);
}

double f_im(double x) {
        ;
        mpfr_set_d(r37485, x, MPFR_RNDN);
        mpfr_cos(r37486, r37485, MPFR_RNDN);
        mpfr_sub(r37487, r37484, r37486, MPFR_RNDN);
        mpfr_sin(r37488, r37485, MPFR_RNDN);
        mpfr_div(r37489, r37487, r37488, MPFR_RNDN);
        return mpfr_get_d(r37489, MPFR_RNDN);
}

static mpfr_t r37490, r37491, r37492, r37493, r37494, r37495, r37496, r37497, r37498, r37499, r37500, r37501, r37502, r37503, r37504, r37505, r37506, r37507, r37508, r37509, r37510, r37511, r37512, r37513, r37514, r37515;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37490);
        mpfr_init_set_str(r37491, "-0.00838508057884762", 10, MPFR_RNDN);
        mpfr_init(r37492);
        mpfr_init(r37493);
        mpfr_init(r37494);
        mpfr_init_set_str(r37495, "1", 10, MPFR_RNDN);
        mpfr_init(r37496);
        mpfr_init(r37497);
        mpfr_init(r37498);
        mpfr_init(r37499);
        mpfr_init_set_str(r37500, "0.006272349724070426", 10, MPFR_RNDN);
        mpfr_init(r37501);
        mpfr_init_set_str(r37502, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37503, "3", 10, MPFR_RNDN);
        mpfr_init(r37504);
        mpfr_init(r37505);
        mpfr_init_set_str(r37506, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37507, "5", 10, MPFR_RNDN);
        mpfr_init(r37508);
        mpfr_init(r37509);
        mpfr_init_set_str(r37510, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37511);
        mpfr_init(r37512);
        mpfr_init(r37513);
        mpfr_init(r37514);
        mpfr_init(r37515);
}

double f_fm(double x) {
        mpfr_set_d(r37490, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37492, mpfr_cmp(r37490, r37491) <= 0, MPFR_RNDN);
        mpfr_sin(r37493, r37490, MPFR_RNDN);
        mpfr_mul(r37494, r37493, r37493, MPFR_RNDN);
        ;
        mpfr_cos(r37496, r37490, MPFR_RNDN);
        mpfr_add(r37497, r37495, r37496, MPFR_RNDN);
        mpfr_div(r37498, r37494, r37497, MPFR_RNDN);
        mpfr_div(r37499, r37498, r37493, MPFR_RNDN);
        ;
        mpfr_set_si(r37501, mpfr_cmp(r37490, r37500) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37504, r37490, r37503, MPFR_RNDN);
        mpfr_mul(r37505, r37502, r37504, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37508, r37490, r37507, MPFR_RNDN);
        mpfr_mul(r37509, r37506, r37508, MPFR_RNDN);
        ;
        mpfr_mul(r37511, r37510, r37490, MPFR_RNDN);
        mpfr_add(r37512, r37509, r37511, MPFR_RNDN);
        mpfr_add(r37513, r37505, r37512, MPFR_RNDN);
        if (mpfr_get_si(r37501, MPFR_RNDN)) { mpfr_set(r37514, r37513, MPFR_RNDN); } else { mpfr_set(r37514, r37499, MPFR_RNDN); };
        if (mpfr_get_si(r37492, MPFR_RNDN)) { mpfr_set(r37515, r37499, MPFR_RNDN); } else { mpfr_set(r37515, r37514, MPFR_RNDN); };
        return mpfr_get_d(r37515, MPFR_RNDN);
}

static mpfr_t r37516, r37517, r37518, r37519, r37520, r37521, r37522, r37523, r37524, r37525, r37526, r37527, r37528, r37529, r37530, r37531, r37532, r37533, r37534, r37535, r37536, r37537, r37538, r37539, r37540, r37541;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37516);
        mpfr_init_set_str(r37517, "-0.00838508057884762", 10, MPFR_RNDN);
        mpfr_init(r37518);
        mpfr_init(r37519);
        mpfr_init(r37520);
        mpfr_init_set_str(r37521, "1", 10, MPFR_RNDN);
        mpfr_init(r37522);
        mpfr_init(r37523);
        mpfr_init(r37524);
        mpfr_init(r37525);
        mpfr_init_set_str(r37526, "0.006272349724070426", 10, MPFR_RNDN);
        mpfr_init(r37527);
        mpfr_init_set_str(r37528, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37529, "3", 10, MPFR_RNDN);
        mpfr_init(r37530);
        mpfr_init(r37531);
        mpfr_init_set_str(r37532, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37533, "5", 10, MPFR_RNDN);
        mpfr_init(r37534);
        mpfr_init(r37535);
        mpfr_init_set_str(r37536, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37537);
        mpfr_init(r37538);
        mpfr_init(r37539);
        mpfr_init(r37540);
        mpfr_init(r37541);
}

double f_dm(double x) {
        mpfr_set_d(r37516, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37518, mpfr_cmp(r37516, r37517) <= 0, MPFR_RNDN);
        mpfr_sin(r37519, r37516, MPFR_RNDN);
        mpfr_mul(r37520, r37519, r37519, MPFR_RNDN);
        ;
        mpfr_cos(r37522, r37516, MPFR_RNDN);
        mpfr_add(r37523, r37521, r37522, MPFR_RNDN);
        mpfr_div(r37524, r37520, r37523, MPFR_RNDN);
        mpfr_div(r37525, r37524, r37519, MPFR_RNDN);
        ;
        mpfr_set_si(r37527, mpfr_cmp(r37516, r37526) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37530, r37516, r37529, MPFR_RNDN);
        mpfr_mul(r37531, r37528, r37530, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37534, r37516, r37533, MPFR_RNDN);
        mpfr_mul(r37535, r37532, r37534, MPFR_RNDN);
        ;
        mpfr_mul(r37537, r37536, r37516, MPFR_RNDN);
        mpfr_add(r37538, r37535, r37537, MPFR_RNDN);
        mpfr_add(r37539, r37531, r37538, MPFR_RNDN);
        if (mpfr_get_si(r37527, MPFR_RNDN)) { mpfr_set(r37540, r37539, MPFR_RNDN); } else { mpfr_set(r37540, r37525, MPFR_RNDN); };
        if (mpfr_get_si(r37518, MPFR_RNDN)) { mpfr_set(r37541, r37525, MPFR_RNDN); } else { mpfr_set(r37541, r37540, MPFR_RNDN); };
        return mpfr_get_d(r37541, MPFR_RNDN);
}

