#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 r37621 = 1;
        float r37622 = x;
        float r37623 = cos(r37622);
        float r37624 = r37621 - r37623;
        float r37625 = sin(r37622);
        float r37626 = r37624 / r37625;
        return r37626;
}

double f_id(double x) {
        double r37627 = 1;
        double r37628 = x;
        double r37629 = cos(r37628);
        double r37630 = r37627 - r37629;
        double r37631 = sin(r37628);
        double r37632 = r37630 / r37631;
        return r37632;
}


double f_of(float x) {
        float r37633 = x;
        float r37634 = -0.023957373082421775;
        bool r37635 = r37633 <= r37634;
        float r37636 = sin(r37633);
        float r37637 = r37636 * r37636;
        float r37638 = 1;
        float r37639 = cos(r37633);
        float r37640 = r37638 + r37639;
        float r37641 = r37637 / r37640;
        float r37642 = r37641 / r37636;
        float r37643 = 0.006272349724070426;
        bool r37644 = r37633 <= r37643;
        float r37645 = 1/24;
        float r37646 = 3;
        float r37647 = pow(r37633, r37646);
        float r37648 = r37645 * r37647;
        float r37649 = 1/240;
        float r37650 = 5;
        float r37651 = pow(r37633, r37650);
        float r37652 = r37649 * r37651;
        float r37653 = 1/2;
        float r37654 = r37653 * r37633;
        float r37655 = r37652 + r37654;
        float r37656 = r37648 + r37655;
        float r37657 = r37644 ? r37656 : r37642;
        float r37658 = r37635 ? r37642 : r37657;
        return r37658;
}

double f_od(double x) {
        double r37659 = x;
        double r37660 = -0.023957373082421775;
        bool r37661 = r37659 <= r37660;
        double r37662 = sin(r37659);
        double r37663 = r37662 * r37662;
        double r37664 = 1;
        double r37665 = cos(r37659);
        double r37666 = r37664 + r37665;
        double r37667 = r37663 / r37666;
        double r37668 = r37667 / r37662;
        double r37669 = 0.006272349724070426;
        bool r37670 = r37659 <= r37669;
        double r37671 = 1/24;
        double r37672 = 3;
        double r37673 = pow(r37659, r37672);
        double r37674 = r37671 * r37673;
        double r37675 = 1/240;
        double r37676 = 5;
        double r37677 = pow(r37659, r37676);
        double r37678 = r37675 * r37677;
        double r37679 = 1/2;
        double r37680 = r37679 * r37659;
        double r37681 = r37678 + r37680;
        double r37682 = r37674 + r37681;
        double r37683 = r37670 ? r37682 : r37668;
        double r37684 = r37661 ? r37668 : r37683;
        return r37684;
}

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 r37685, r37686, r37687, r37688, r37689, r37690;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r37685, "1", 10, MPFR_RNDN);
        mpfr_init(r37686);
        mpfr_init(r37687);
        mpfr_init(r37688);
        mpfr_init(r37689);
        mpfr_init(r37690);
}

double f_im(double x) {
        ;
        mpfr_set_d(r37686, x, MPFR_RNDN);
        mpfr_cos(r37687, r37686, MPFR_RNDN);
        mpfr_sub(r37688, r37685, r37687, MPFR_RNDN);
        mpfr_sin(r37689, r37686, MPFR_RNDN);
        mpfr_div(r37690, r37688, r37689, MPFR_RNDN);
        return mpfr_get_d(r37690, MPFR_RNDN);
}

static mpfr_t r37691, r37692, r37693, r37694, r37695, r37696, r37697, r37698, r37699, r37700, r37701, r37702, r37703, r37704, r37705, r37706, r37707, r37708, r37709, r37710, r37711, r37712, r37713, r37714, r37715, r37716;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37691);
        mpfr_init_set_str(r37692, "-0.023957373082421775", 10, MPFR_RNDN);
        mpfr_init(r37693);
        mpfr_init(r37694);
        mpfr_init(r37695);
        mpfr_init_set_str(r37696, "1", 10, MPFR_RNDN);
        mpfr_init(r37697);
        mpfr_init(r37698);
        mpfr_init(r37699);
        mpfr_init(r37700);
        mpfr_init_set_str(r37701, "0.006272349724070426", 10, MPFR_RNDN);
        mpfr_init(r37702);
        mpfr_init_set_str(r37703, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37704, "3", 10, MPFR_RNDN);
        mpfr_init(r37705);
        mpfr_init(r37706);
        mpfr_init_set_str(r37707, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37708, "5", 10, MPFR_RNDN);
        mpfr_init(r37709);
        mpfr_init(r37710);
        mpfr_init_set_str(r37711, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37712);
        mpfr_init(r37713);
        mpfr_init(r37714);
        mpfr_init(r37715);
        mpfr_init(r37716);
}

double f_fm(double x) {
        mpfr_set_d(r37691, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37693, mpfr_cmp(r37691, r37692) <= 0, MPFR_RNDN);
        mpfr_sin(r37694, r37691, MPFR_RNDN);
        mpfr_mul(r37695, r37694, r37694, MPFR_RNDN);
        ;
        mpfr_cos(r37697, r37691, MPFR_RNDN);
        mpfr_add(r37698, r37696, r37697, MPFR_RNDN);
        mpfr_div(r37699, r37695, r37698, MPFR_RNDN);
        mpfr_div(r37700, r37699, r37694, MPFR_RNDN);
        ;
        mpfr_set_si(r37702, mpfr_cmp(r37691, r37701) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37705, r37691, r37704, MPFR_RNDN);
        mpfr_mul(r37706, r37703, r37705, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37709, r37691, r37708, MPFR_RNDN);
        mpfr_mul(r37710, r37707, r37709, MPFR_RNDN);
        ;
        mpfr_mul(r37712, r37711, r37691, MPFR_RNDN);
        mpfr_add(r37713, r37710, r37712, MPFR_RNDN);
        mpfr_add(r37714, r37706, r37713, MPFR_RNDN);
        if (mpfr_get_si(r37702, MPFR_RNDN)) { mpfr_set(r37715, r37714, MPFR_RNDN); } else { mpfr_set(r37715, r37700, MPFR_RNDN); };
        if (mpfr_get_si(r37693, MPFR_RNDN)) { mpfr_set(r37716, r37700, MPFR_RNDN); } else { mpfr_set(r37716, r37715, MPFR_RNDN); };
        return mpfr_get_d(r37716, MPFR_RNDN);
}

static mpfr_t r37717, r37718, r37719, r37720, r37721, r37722, r37723, r37724, r37725, r37726, r37727, r37728, r37729, r37730, r37731, r37732, r37733, r37734, r37735, r37736, r37737, r37738, r37739, r37740, r37741, r37742;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37717);
        mpfr_init_set_str(r37718, "-0.023957373082421775", 10, MPFR_RNDN);
        mpfr_init(r37719);
        mpfr_init(r37720);
        mpfr_init(r37721);
        mpfr_init_set_str(r37722, "1", 10, MPFR_RNDN);
        mpfr_init(r37723);
        mpfr_init(r37724);
        mpfr_init(r37725);
        mpfr_init(r37726);
        mpfr_init_set_str(r37727, "0.006272349724070426", 10, MPFR_RNDN);
        mpfr_init(r37728);
        mpfr_init_set_str(r37729, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37730, "3", 10, MPFR_RNDN);
        mpfr_init(r37731);
        mpfr_init(r37732);
        mpfr_init_set_str(r37733, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37734, "5", 10, MPFR_RNDN);
        mpfr_init(r37735);
        mpfr_init(r37736);
        mpfr_init_set_str(r37737, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37738);
        mpfr_init(r37739);
        mpfr_init(r37740);
        mpfr_init(r37741);
        mpfr_init(r37742);
}

double f_dm(double x) {
        mpfr_set_d(r37717, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37719, mpfr_cmp(r37717, r37718) <= 0, MPFR_RNDN);
        mpfr_sin(r37720, r37717, MPFR_RNDN);
        mpfr_mul(r37721, r37720, r37720, MPFR_RNDN);
        ;
        mpfr_cos(r37723, r37717, MPFR_RNDN);
        mpfr_add(r37724, r37722, r37723, MPFR_RNDN);
        mpfr_div(r37725, r37721, r37724, MPFR_RNDN);
        mpfr_div(r37726, r37725, r37720, MPFR_RNDN);
        ;
        mpfr_set_si(r37728, mpfr_cmp(r37717, r37727) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37731, r37717, r37730, MPFR_RNDN);
        mpfr_mul(r37732, r37729, r37731, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37735, r37717, r37734, MPFR_RNDN);
        mpfr_mul(r37736, r37733, r37735, MPFR_RNDN);
        ;
        mpfr_mul(r37738, r37737, r37717, MPFR_RNDN);
        mpfr_add(r37739, r37736, r37738, MPFR_RNDN);
        mpfr_add(r37740, r37732, r37739, MPFR_RNDN);
        if (mpfr_get_si(r37728, MPFR_RNDN)) { mpfr_set(r37741, r37740, MPFR_RNDN); } else { mpfr_set(r37741, r37726, MPFR_RNDN); };
        if (mpfr_get_si(r37719, MPFR_RNDN)) { mpfr_set(r37742, r37726, MPFR_RNDN); } else { mpfr_set(r37742, r37741, MPFR_RNDN); };
        return mpfr_get_d(r37742, MPFR_RNDN);
}

