#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 r37890 = 1;
        float r37891 = x;
        float r37892 = cos(r37891);
        float r37893 = r37890 - r37892;
        float r37894 = sin(r37891);
        float r37895 = r37893 / r37894;
        return r37895;
}

double f_id(double x) {
        double r37896 = 1;
        double r37897 = x;
        double r37898 = cos(r37897);
        double r37899 = r37896 - r37898;
        double r37900 = sin(r37897);
        double r37901 = r37899 / r37900;
        return r37901;
}


double f_of(float x) {
        float r37902 = x;
        float r37903 = -0.023957373082421775;
        bool r37904 = r37902 <= r37903;
        float r37905 = sin(r37902);
        float r37906 = r37905 * r37905;
        float r37907 = 1;
        float r37908 = cos(r37902);
        float r37909 = r37907 + r37908;
        float r37910 = r37906 / r37909;
        float r37911 = r37910 / r37905;
        float r37912 = 0.006272349724070426;
        bool r37913 = r37902 <= r37912;
        float r37914 = 1/24;
        float r37915 = 3;
        float r37916 = pow(r37902, r37915);
        float r37917 = r37914 * r37916;
        float r37918 = 1/240;
        float r37919 = 5;
        float r37920 = pow(r37902, r37919);
        float r37921 = r37918 * r37920;
        float r37922 = 1/2;
        float r37923 = r37922 * r37902;
        float r37924 = r37921 + r37923;
        float r37925 = r37917 + r37924;
        float r37926 = r37913 ? r37925 : r37911;
        float r37927 = r37904 ? r37911 : r37926;
        return r37927;
}

double f_od(double x) {
        double r37928 = x;
        double r37929 = -0.023957373082421775;
        bool r37930 = r37928 <= r37929;
        double r37931 = sin(r37928);
        double r37932 = r37931 * r37931;
        double r37933 = 1;
        double r37934 = cos(r37928);
        double r37935 = r37933 + r37934;
        double r37936 = r37932 / r37935;
        double r37937 = r37936 / r37931;
        double r37938 = 0.006272349724070426;
        bool r37939 = r37928 <= r37938;
        double r37940 = 1/24;
        double r37941 = 3;
        double r37942 = pow(r37928, r37941);
        double r37943 = r37940 * r37942;
        double r37944 = 1/240;
        double r37945 = 5;
        double r37946 = pow(r37928, r37945);
        double r37947 = r37944 * r37946;
        double r37948 = 1/2;
        double r37949 = r37948 * r37928;
        double r37950 = r37947 + r37949;
        double r37951 = r37943 + r37950;
        double r37952 = r37939 ? r37951 : r37937;
        double r37953 = r37930 ? r37937 : r37952;
        return r37953;
}

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 r37954, r37955, r37956, r37957, r37958, r37959;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r37954, "1", 10, MPFR_RNDN);
        mpfr_init(r37955);
        mpfr_init(r37956);
        mpfr_init(r37957);
        mpfr_init(r37958);
        mpfr_init(r37959);
}

double f_im(double x) {
        ;
        mpfr_set_d(r37955, x, MPFR_RNDN);
        mpfr_cos(r37956, r37955, MPFR_RNDN);
        mpfr_sub(r37957, r37954, r37956, MPFR_RNDN);
        mpfr_sin(r37958, r37955, MPFR_RNDN);
        mpfr_div(r37959, r37957, r37958, MPFR_RNDN);
        return mpfr_get_d(r37959, MPFR_RNDN);
}

static mpfr_t r37960, r37961, r37962, r37963, r37964, r37965, r37966, r37967, r37968, r37969, r37970, r37971, r37972, r37973, r37974, r37975, r37976, r37977, r37978, r37979, r37980, r37981, r37982, r37983, r37984, r37985;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37960);
        mpfr_init_set_str(r37961, "-0.023957373082421775", 10, MPFR_RNDN);
        mpfr_init(r37962);
        mpfr_init(r37963);
        mpfr_init(r37964);
        mpfr_init_set_str(r37965, "1", 10, MPFR_RNDN);
        mpfr_init(r37966);
        mpfr_init(r37967);
        mpfr_init(r37968);
        mpfr_init(r37969);
        mpfr_init_set_str(r37970, "0.006272349724070426", 10, MPFR_RNDN);
        mpfr_init(r37971);
        mpfr_init_set_str(r37972, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37973, "3", 10, MPFR_RNDN);
        mpfr_init(r37974);
        mpfr_init(r37975);
        mpfr_init_set_str(r37976, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37977, "5", 10, MPFR_RNDN);
        mpfr_init(r37978);
        mpfr_init(r37979);
        mpfr_init_set_str(r37980, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37981);
        mpfr_init(r37982);
        mpfr_init(r37983);
        mpfr_init(r37984);
        mpfr_init(r37985);
}

double f_fm(double x) {
        mpfr_set_d(r37960, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37962, mpfr_cmp(r37960, r37961) <= 0, MPFR_RNDN);
        mpfr_sin(r37963, r37960, MPFR_RNDN);
        mpfr_mul(r37964, r37963, r37963, MPFR_RNDN);
        ;
        mpfr_cos(r37966, r37960, MPFR_RNDN);
        mpfr_add(r37967, r37965, r37966, MPFR_RNDN);
        mpfr_div(r37968, r37964, r37967, MPFR_RNDN);
        mpfr_div(r37969, r37968, r37963, MPFR_RNDN);
        ;
        mpfr_set_si(r37971, mpfr_cmp(r37960, r37970) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37974, r37960, r37973, MPFR_RNDN);
        mpfr_mul(r37975, r37972, r37974, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37978, r37960, r37977, MPFR_RNDN);
        mpfr_mul(r37979, r37976, r37978, MPFR_RNDN);
        ;
        mpfr_mul(r37981, r37980, r37960, MPFR_RNDN);
        mpfr_add(r37982, r37979, r37981, MPFR_RNDN);
        mpfr_add(r37983, r37975, r37982, MPFR_RNDN);
        if (mpfr_get_si(r37971, MPFR_RNDN)) { mpfr_set(r37984, r37983, MPFR_RNDN); } else { mpfr_set(r37984, r37969, MPFR_RNDN); };
        if (mpfr_get_si(r37962, MPFR_RNDN)) { mpfr_set(r37985, r37969, MPFR_RNDN); } else { mpfr_set(r37985, r37984, MPFR_RNDN); };
        return mpfr_get_d(r37985, MPFR_RNDN);
}

static mpfr_t r37986, r37987, r37988, r37989, r37990, r37991, r37992, r37993, r37994, r37995, r37996, r37997, r37998, r37999, r38000, r38001, r38002, r38003, r38004, r38005, r38006, r38007, r38008, r38009, r38010, r38011;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37986);
        mpfr_init_set_str(r37987, "-0.023957373082421775", 10, MPFR_RNDN);
        mpfr_init(r37988);
        mpfr_init(r37989);
        mpfr_init(r37990);
        mpfr_init_set_str(r37991, "1", 10, MPFR_RNDN);
        mpfr_init(r37992);
        mpfr_init(r37993);
        mpfr_init(r37994);
        mpfr_init(r37995);
        mpfr_init_set_str(r37996, "0.006272349724070426", 10, MPFR_RNDN);
        mpfr_init(r37997);
        mpfr_init_set_str(r37998, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37999, "3", 10, MPFR_RNDN);
        mpfr_init(r38000);
        mpfr_init(r38001);
        mpfr_init_set_str(r38002, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r38003, "5", 10, MPFR_RNDN);
        mpfr_init(r38004);
        mpfr_init(r38005);
        mpfr_init_set_str(r38006, "1/2", 10, MPFR_RNDN);
        mpfr_init(r38007);
        mpfr_init(r38008);
        mpfr_init(r38009);
        mpfr_init(r38010);
        mpfr_init(r38011);
}

double f_dm(double x) {
        mpfr_set_d(r37986, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37988, mpfr_cmp(r37986, r37987) <= 0, MPFR_RNDN);
        mpfr_sin(r37989, r37986, MPFR_RNDN);
        mpfr_mul(r37990, r37989, r37989, MPFR_RNDN);
        ;
        mpfr_cos(r37992, r37986, MPFR_RNDN);
        mpfr_add(r37993, r37991, r37992, MPFR_RNDN);
        mpfr_div(r37994, r37990, r37993, MPFR_RNDN);
        mpfr_div(r37995, r37994, r37989, MPFR_RNDN);
        ;
        mpfr_set_si(r37997, mpfr_cmp(r37986, r37996) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r38000, r37986, r37999, MPFR_RNDN);
        mpfr_mul(r38001, r37998, r38000, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r38004, r37986, r38003, MPFR_RNDN);
        mpfr_mul(r38005, r38002, r38004, MPFR_RNDN);
        ;
        mpfr_mul(r38007, r38006, r37986, MPFR_RNDN);
        mpfr_add(r38008, r38005, r38007, MPFR_RNDN);
        mpfr_add(r38009, r38001, r38008, MPFR_RNDN);
        if (mpfr_get_si(r37997, MPFR_RNDN)) { mpfr_set(r38010, r38009, MPFR_RNDN); } else { mpfr_set(r38010, r37995, MPFR_RNDN); };
        if (mpfr_get_si(r37988, MPFR_RNDN)) { mpfr_set(r38011, r37995, MPFR_RNDN); } else { mpfr_set(r38011, r38010, MPFR_RNDN); };
        return mpfr_get_d(r38011, MPFR_RNDN);
}

