#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 r37850 = 1;
        float r37851 = x;
        float r37852 = cos(r37851);
        float r37853 = r37850 - r37852;
        float r37854 = sin(r37851);
        float r37855 = r37853 / r37854;
        return r37855;
}

double f_id(double x) {
        double r37856 = 1;
        double r37857 = x;
        double r37858 = cos(r37857);
        double r37859 = r37856 - r37858;
        double r37860 = sin(r37857);
        double r37861 = r37859 / r37860;
        return r37861;
}


double f_of(float x) {
        float r37862 = x;
        float r37863 = -3.979550813088296e-22;
        bool r37864 = r37862 <= r37863;
        float r37865 = sin(r37862);
        float r37866 = r37865 * r37865;
        float r37867 = 1;
        float r37868 = cos(r37862);
        float r37869 = r37867 + r37868;
        float r37870 = r37866 / r37869;
        float r37871 = r37870 / r37865;
        float r37872 = 0.802860764679358;
        bool r37873 = r37862 <= r37872;
        float r37874 = 1/24;
        float r37875 = 3;
        float r37876 = pow(r37862, r37875);
        float r37877 = r37874 * r37876;
        float r37878 = 1/240;
        float r37879 = 5;
        float r37880 = pow(r37862, r37879);
        float r37881 = r37878 * r37880;
        float r37882 = 1/2;
        float r37883 = r37882 * r37862;
        float r37884 = r37881 + r37883;
        float r37885 = r37877 + r37884;
        float r37886 = r37873 ? r37885 : r37871;
        float r37887 = r37864 ? r37871 : r37886;
        return r37887;
}

double f_od(double x) {
        double r37888 = x;
        double r37889 = -3.979550813088296e-22;
        bool r37890 = r37888 <= r37889;
        double r37891 = sin(r37888);
        double r37892 = r37891 * r37891;
        double r37893 = 1;
        double r37894 = cos(r37888);
        double r37895 = r37893 + r37894;
        double r37896 = r37892 / r37895;
        double r37897 = r37896 / r37891;
        double r37898 = 0.802860764679358;
        bool r37899 = r37888 <= r37898;
        double r37900 = 1/24;
        double r37901 = 3;
        double r37902 = pow(r37888, r37901);
        double r37903 = r37900 * r37902;
        double r37904 = 1/240;
        double r37905 = 5;
        double r37906 = pow(r37888, r37905);
        double r37907 = r37904 * r37906;
        double r37908 = 1/2;
        double r37909 = r37908 * r37888;
        double r37910 = r37907 + r37909;
        double r37911 = r37903 + r37910;
        double r37912 = r37899 ? r37911 : r37897;
        double r37913 = r37890 ? r37897 : r37912;
        return r37913;
}

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 r37914, r37915, r37916, r37917, r37918, r37919;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r37914, "1", 10, MPFR_RNDN);
        mpfr_init(r37915);
        mpfr_init(r37916);
        mpfr_init(r37917);
        mpfr_init(r37918);
        mpfr_init(r37919);
}

double f_im(double x) {
        ;
        mpfr_set_d(r37915, x, MPFR_RNDN);
        mpfr_cos(r37916, r37915, MPFR_RNDN);
        mpfr_sub(r37917, r37914, r37916, MPFR_RNDN);
        mpfr_sin(r37918, r37915, MPFR_RNDN);
        mpfr_div(r37919, r37917, r37918, MPFR_RNDN);
        return mpfr_get_d(r37919, MPFR_RNDN);
}

static mpfr_t r37920, r37921, r37922, r37923, r37924, r37925, r37926, r37927, r37928, r37929, r37930, r37931, r37932, r37933, r37934, r37935, r37936, r37937, r37938, r37939, r37940, r37941, r37942, r37943, r37944, r37945;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37920);
        mpfr_init_set_str(r37921, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r37922);
        mpfr_init(r37923);
        mpfr_init(r37924);
        mpfr_init_set_str(r37925, "1", 10, MPFR_RNDN);
        mpfr_init(r37926);
        mpfr_init(r37927);
        mpfr_init(r37928);
        mpfr_init(r37929);
        mpfr_init_set_str(r37930, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r37931);
        mpfr_init_set_str(r37932, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37933, "3", 10, MPFR_RNDN);
        mpfr_init(r37934);
        mpfr_init(r37935);
        mpfr_init_set_str(r37936, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37937, "5", 10, MPFR_RNDN);
        mpfr_init(r37938);
        mpfr_init(r37939);
        mpfr_init_set_str(r37940, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37941);
        mpfr_init(r37942);
        mpfr_init(r37943);
        mpfr_init(r37944);
        mpfr_init(r37945);
}

double f_fm(double x) {
        mpfr_set_d(r37920, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37922, mpfr_cmp(r37920, r37921) <= 0, MPFR_RNDN);
        mpfr_sin(r37923, r37920, MPFR_RNDN);
        mpfr_mul(r37924, r37923, r37923, MPFR_RNDN);
        ;
        mpfr_cos(r37926, r37920, MPFR_RNDN);
        mpfr_add(r37927, r37925, r37926, MPFR_RNDN);
        mpfr_div(r37928, r37924, r37927, MPFR_RNDN);
        mpfr_div(r37929, r37928, r37923, MPFR_RNDN);
        ;
        mpfr_set_si(r37931, mpfr_cmp(r37920, r37930) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37934, r37920, r37933, MPFR_RNDN);
        mpfr_mul(r37935, r37932, r37934, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37938, r37920, r37937, MPFR_RNDN);
        mpfr_mul(r37939, r37936, r37938, MPFR_RNDN);
        ;
        mpfr_mul(r37941, r37940, r37920, MPFR_RNDN);
        mpfr_add(r37942, r37939, r37941, MPFR_RNDN);
        mpfr_add(r37943, r37935, r37942, MPFR_RNDN);
        if (mpfr_get_si(r37931, MPFR_RNDN)) { mpfr_set(r37944, r37943, MPFR_RNDN); } else { mpfr_set(r37944, r37929, MPFR_RNDN); };
        if (mpfr_get_si(r37922, MPFR_RNDN)) { mpfr_set(r37945, r37929, MPFR_RNDN); } else { mpfr_set(r37945, r37944, MPFR_RNDN); };
        return mpfr_get_d(r37945, MPFR_RNDN);
}

static mpfr_t r37946, r37947, r37948, r37949, r37950, r37951, r37952, r37953, r37954, r37955, r37956, r37957, r37958, r37959, r37960, r37961, r37962, r37963, r37964, r37965, r37966, r37967, r37968, r37969, r37970, r37971;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r37946);
        mpfr_init_set_str(r37947, "-3.979550813088296e-22", 10, MPFR_RNDN);
        mpfr_init(r37948);
        mpfr_init(r37949);
        mpfr_init(r37950);
        mpfr_init_set_str(r37951, "1", 10, MPFR_RNDN);
        mpfr_init(r37952);
        mpfr_init(r37953);
        mpfr_init(r37954);
        mpfr_init(r37955);
        mpfr_init_set_str(r37956, "0.802860764679358", 10, MPFR_RNDN);
        mpfr_init(r37957);
        mpfr_init_set_str(r37958, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r37959, "3", 10, MPFR_RNDN);
        mpfr_init(r37960);
        mpfr_init(r37961);
        mpfr_init_set_str(r37962, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r37963, "5", 10, MPFR_RNDN);
        mpfr_init(r37964);
        mpfr_init(r37965);
        mpfr_init_set_str(r37966, "1/2", 10, MPFR_RNDN);
        mpfr_init(r37967);
        mpfr_init(r37968);
        mpfr_init(r37969);
        mpfr_init(r37970);
        mpfr_init(r37971);
}

double f_dm(double x) {
        mpfr_set_d(r37946, x, MPFR_RNDN);
        ;
        mpfr_set_si(r37948, mpfr_cmp(r37946, r37947) <= 0, MPFR_RNDN);
        mpfr_sin(r37949, r37946, MPFR_RNDN);
        mpfr_mul(r37950, r37949, r37949, MPFR_RNDN);
        ;
        mpfr_cos(r37952, r37946, MPFR_RNDN);
        mpfr_add(r37953, r37951, r37952, MPFR_RNDN);
        mpfr_div(r37954, r37950, r37953, MPFR_RNDN);
        mpfr_div(r37955, r37954, r37949, MPFR_RNDN);
        ;
        mpfr_set_si(r37957, mpfr_cmp(r37946, r37956) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37960, r37946, r37959, MPFR_RNDN);
        mpfr_mul(r37961, r37958, r37960, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r37964, r37946, r37963, MPFR_RNDN);
        mpfr_mul(r37965, r37962, r37964, MPFR_RNDN);
        ;
        mpfr_mul(r37967, r37966, r37946, MPFR_RNDN);
        mpfr_add(r37968, r37965, r37967, MPFR_RNDN);
        mpfr_add(r37969, r37961, r37968, MPFR_RNDN);
        if (mpfr_get_si(r37957, MPFR_RNDN)) { mpfr_set(r37970, r37969, MPFR_RNDN); } else { mpfr_set(r37970, r37955, MPFR_RNDN); };
        if (mpfr_get_si(r37948, MPFR_RNDN)) { mpfr_set(r37971, r37955, MPFR_RNDN); } else { mpfr_set(r37971, r37970, MPFR_RNDN); };
        return mpfr_get_d(r37971, MPFR_RNDN);
}

