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

char *name = "invcot (example 3.9)";

double f_if(float x) {
        float r39008 = 1;
        float r39009 = x;
        float r39010 = r39008 / r39009;
        float r39011 = tan(r39009);
        float r39012 = r39008 / r39011;
        float r39013 = r39010 - r39012;
        return r39013;
}

double f_id(double x) {
        double r39014 = 1;
        double r39015 = x;
        double r39016 = r39014 / r39015;
        double r39017 = tan(r39015);
        double r39018 = r39014 / r39017;
        double r39019 = r39016 - r39018;
        return r39019;
}


double f_of(float x) {
        float r39020 = x;
        float r39021 = 1/3;
        float r39022 = r39020 * r39021;
        float r39023 = r39020 * r39020;
        float r39024 = 1/45;
        float r39025 = r39020 * r39024;
        float r39026 = r39023 * r39025;
        float r39027 = 2/945;
        float r39028 = 5;
        float r39029 = pow(r39020, r39028);
        float r39030 = r39027 * r39029;
        float r39031 = r39026 + r39030;
        float r39032 = r39022 + r39031;
        return r39032;
}

double f_od(double x) {
        double r39033 = x;
        double r39034 = 1/3;
        double r39035 = r39033 * r39034;
        double r39036 = r39033 * r39033;
        double r39037 = 1/45;
        double r39038 = r39033 * r39037;
        double r39039 = r39036 * r39038;
        double r39040 = 2/945;
        double r39041 = 5;
        double r39042 = pow(r39033, r39041);
        double r39043 = r39040 * r39042;
        double r39044 = r39039 + r39043;
        double r39045 = r39035 + r39044;
        return r39045;
}

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 r39046, r39047, r39048, r39049, r39050, r39051;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39046, "1", 10, MPFR_RNDN);
        mpfr_init(r39047);
        mpfr_init(r39048);
        mpfr_init(r39049);
        mpfr_init(r39050);
        mpfr_init(r39051);
}

double f_im(double x) {
        ;
        mpfr_set_d(r39047, x, MPFR_RNDN);
        mpfr_div(r39048, r39046, r39047, MPFR_RNDN);
        mpfr_tan(r39049, r39047, MPFR_RNDN);
        mpfr_div(r39050, r39046, r39049, MPFR_RNDN);
        mpfr_sub(r39051, r39048, r39050, MPFR_RNDN);
        return mpfr_get_d(r39051, MPFR_RNDN);
}

static mpfr_t r39052, r39053, r39054, r39055, r39056, r39057, r39058, r39059, r39060, r39061, r39062, r39063, r39064;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r39052);
        mpfr_init_set_str(r39053, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39054);
        mpfr_init(r39055);
        mpfr_init_set_str(r39056, "1/45", 10, MPFR_RNDN);
        mpfr_init(r39057);
        mpfr_init(r39058);
        mpfr_init_set_str(r39059, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r39060, "5", 10, MPFR_RNDN);
        mpfr_init(r39061);
        mpfr_init(r39062);
        mpfr_init(r39063);
        mpfr_init(r39064);
}

double f_fm(double x) {
        mpfr_set_d(r39052, x, MPFR_RNDN);
        ;
        mpfr_mul(r39054, r39052, r39053, MPFR_RNDN);
        mpfr_mul(r39055, r39052, r39052, MPFR_RNDN);
        ;
        mpfr_mul(r39057, r39052, r39056, MPFR_RNDN);
        mpfr_mul(r39058, r39055, r39057, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39061, r39052, r39060, MPFR_RNDN);
        mpfr_mul(r39062, r39059, r39061, MPFR_RNDN);
        mpfr_add(r39063, r39058, r39062, MPFR_RNDN);
        mpfr_add(r39064, r39054, r39063, MPFR_RNDN);
        return mpfr_get_d(r39064, MPFR_RNDN);
}

static mpfr_t r39065, r39066, r39067, r39068, r39069, r39070, r39071, r39072, r39073, r39074, r39075, r39076, r39077;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r39065);
        mpfr_init_set_str(r39066, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39067);
        mpfr_init(r39068);
        mpfr_init_set_str(r39069, "1/45", 10, MPFR_RNDN);
        mpfr_init(r39070);
        mpfr_init(r39071);
        mpfr_init_set_str(r39072, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r39073, "5", 10, MPFR_RNDN);
        mpfr_init(r39074);
        mpfr_init(r39075);
        mpfr_init(r39076);
        mpfr_init(r39077);
}

double f_dm(double x) {
        mpfr_set_d(r39065, x, MPFR_RNDN);
        ;
        mpfr_mul(r39067, r39065, r39066, MPFR_RNDN);
        mpfr_mul(r39068, r39065, r39065, MPFR_RNDN);
        ;
        mpfr_mul(r39070, r39065, r39069, MPFR_RNDN);
        mpfr_mul(r39071, r39068, r39070, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39074, r39065, r39073, MPFR_RNDN);
        mpfr_mul(r39075, r39072, r39074, MPFR_RNDN);
        mpfr_add(r39076, r39071, r39075, MPFR_RNDN);
        mpfr_add(r39077, r39067, r39076, MPFR_RNDN);
        return mpfr_get_d(r39077, MPFR_RNDN);
}

