#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 r39177 = 1;
        float r39178 = x;
        float r39179 = r39177 / r39178;
        float r39180 = tan(r39178);
        float r39181 = r39177 / r39180;
        float r39182 = r39179 - r39181;
        return r39182;
}

double f_id(double x) {
        double r39183 = 1;
        double r39184 = x;
        double r39185 = r39183 / r39184;
        double r39186 = tan(r39184);
        double r39187 = r39183 / r39186;
        double r39188 = r39185 - r39187;
        return r39188;
}


double f_of(float x) {
        float r39189 = 1/45;
        float r39190 = x;
        float r39191 = 3;
        float r39192 = pow(r39190, r39191);
        float r39193 = r39189 * r39192;
        float r39194 = exp(r39193);
        float r39195 = log(r39194);
        float r39196 = 2/945;
        float r39197 = 5;
        float r39198 = pow(r39190, r39197);
        float r39199 = r39196 * r39198;
        float r39200 = 1/3;
        float r39201 = r39200 * r39190;
        float r39202 = r39199 + r39201;
        float r39203 = r39195 + r39202;
        return r39203;
}

double f_od(double x) {
        double r39204 = 1/45;
        double r39205 = x;
        double r39206 = 3;
        double r39207 = pow(r39205, r39206);
        double r39208 = r39204 * r39207;
        double r39209 = exp(r39208);
        double r39210 = log(r39209);
        double r39211 = 2/945;
        double r39212 = 5;
        double r39213 = pow(r39205, r39212);
        double r39214 = r39211 * r39213;
        double r39215 = 1/3;
        double r39216 = r39215 * r39205;
        double r39217 = r39214 + r39216;
        double r39218 = r39210 + r39217;
        return r39218;
}

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 r39219, r39220, r39221, r39222, r39223, r39224;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39219, "1", 10, MPFR_RNDN);
        mpfr_init(r39220);
        mpfr_init(r39221);
        mpfr_init(r39222);
        mpfr_init(r39223);
        mpfr_init(r39224);
}

double f_im(double x) {
        ;
        mpfr_set_d(r39220, x, MPFR_RNDN);
        mpfr_div(r39221, r39219, r39220, MPFR_RNDN);
        mpfr_tan(r39222, r39220, MPFR_RNDN);
        mpfr_div(r39223, r39219, r39222, MPFR_RNDN);
        mpfr_sub(r39224, r39221, r39223, MPFR_RNDN);
        return mpfr_get_d(r39224, MPFR_RNDN);
}

static mpfr_t r39225, r39226, r39227, r39228, r39229, r39230, r39231, r39232, r39233, r39234, r39235, r39236, r39237, r39238, r39239;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39225, "1/45", 10, MPFR_RNDN);
        mpfr_init(r39226);
        mpfr_init_set_str(r39227, "3", 10, MPFR_RNDN);
        mpfr_init(r39228);
        mpfr_init(r39229);
        mpfr_init(r39230);
        mpfr_init(r39231);
        mpfr_init_set_str(r39232, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r39233, "5", 10, MPFR_RNDN);
        mpfr_init(r39234);
        mpfr_init(r39235);
        mpfr_init_set_str(r39236, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39237);
        mpfr_init(r39238);
        mpfr_init(r39239);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r39226, x, MPFR_RNDN);
        ;
        mpfr_pow(r39228, r39226, r39227, MPFR_RNDN);
        mpfr_mul(r39229, r39225, r39228, MPFR_RNDN);
        mpfr_exp(r39230, r39229, MPFR_RNDN);
        mpfr_log(r39231, r39230, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39234, r39226, r39233, MPFR_RNDN);
        mpfr_mul(r39235, r39232, r39234, MPFR_RNDN);
        ;
        mpfr_mul(r39237, r39236, r39226, MPFR_RNDN);
        mpfr_add(r39238, r39235, r39237, MPFR_RNDN);
        mpfr_add(r39239, r39231, r39238, MPFR_RNDN);
        return mpfr_get_d(r39239, MPFR_RNDN);
}

static mpfr_t r39240, r39241, r39242, r39243, r39244, r39245, r39246, r39247, r39248, r39249, r39250, r39251, r39252, r39253, r39254;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39240, "1/45", 10, MPFR_RNDN);
        mpfr_init(r39241);
        mpfr_init_set_str(r39242, "3", 10, MPFR_RNDN);
        mpfr_init(r39243);
        mpfr_init(r39244);
        mpfr_init(r39245);
        mpfr_init(r39246);
        mpfr_init_set_str(r39247, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r39248, "5", 10, MPFR_RNDN);
        mpfr_init(r39249);
        mpfr_init(r39250);
        mpfr_init_set_str(r39251, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39252);
        mpfr_init(r39253);
        mpfr_init(r39254);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r39241, x, MPFR_RNDN);
        ;
        mpfr_pow(r39243, r39241, r39242, MPFR_RNDN);
        mpfr_mul(r39244, r39240, r39243, MPFR_RNDN);
        mpfr_exp(r39245, r39244, MPFR_RNDN);
        mpfr_log(r39246, r39245, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39249, r39241, r39248, MPFR_RNDN);
        mpfr_mul(r39250, r39247, r39249, MPFR_RNDN);
        ;
        mpfr_mul(r39252, r39251, r39241, MPFR_RNDN);
        mpfr_add(r39253, r39250, r39252, MPFR_RNDN);
        mpfr_add(r39254, r39246, r39253, MPFR_RNDN);
        return mpfr_get_d(r39254, MPFR_RNDN);
}

