#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 r38925 = 1;
        float r38926 = x;
        float r38927 = r38925 / r38926;
        float r38928 = tan(r38926);
        float r38929 = r38925 / r38928;
        float r38930 = r38927 - r38929;
        return r38930;
}

double f_id(double x) {
        double r38931 = 1;
        double r38932 = x;
        double r38933 = r38931 / r38932;
        double r38934 = tan(r38932);
        double r38935 = r38931 / r38934;
        double r38936 = r38933 - r38935;
        return r38936;
}


double f_of(float x) {
        float r38937 = 1/45;
        float r38938 = x;
        float r38939 = 3;
        float r38940 = pow(r38938, r38939);
        float r38941 = r38937 * r38940;
        float r38942 = exp(r38941);
        float r38943 = log(r38942);
        float r38944 = 2/945;
        float r38945 = 5;
        float r38946 = pow(r38938, r38945);
        float r38947 = r38944 * r38946;
        float r38948 = 1/3;
        float r38949 = r38948 * r38938;
        float r38950 = r38947 + r38949;
        float r38951 = r38943 + r38950;
        return r38951;
}

double f_od(double x) {
        double r38952 = 1/45;
        double r38953 = x;
        double r38954 = 3;
        double r38955 = pow(r38953, r38954);
        double r38956 = r38952 * r38955;
        double r38957 = exp(r38956);
        double r38958 = log(r38957);
        double r38959 = 2/945;
        double r38960 = 5;
        double r38961 = pow(r38953, r38960);
        double r38962 = r38959 * r38961;
        double r38963 = 1/3;
        double r38964 = r38963 * r38953;
        double r38965 = r38962 + r38964;
        double r38966 = r38958 + r38965;
        return r38966;
}

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 r38967, r38968, r38969, r38970, r38971, r38972;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r38967, "1", 10, MPFR_RNDN);
        mpfr_init(r38968);
        mpfr_init(r38969);
        mpfr_init(r38970);
        mpfr_init(r38971);
        mpfr_init(r38972);
}

double f_im(double x) {
        ;
        mpfr_set_d(r38968, x, MPFR_RNDN);
        mpfr_div(r38969, r38967, r38968, MPFR_RNDN);
        mpfr_tan(r38970, r38968, MPFR_RNDN);
        mpfr_div(r38971, r38967, r38970, MPFR_RNDN);
        mpfr_sub(r38972, r38969, r38971, MPFR_RNDN);
        return mpfr_get_d(r38972, MPFR_RNDN);
}

static mpfr_t r38973, r38974, r38975, r38976, r38977, r38978, r38979, r38980, r38981, r38982, r38983, r38984, r38985, r38986, r38987;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r38973, "1/45", 10, MPFR_RNDN);
        mpfr_init(r38974);
        mpfr_init_set_str(r38975, "3", 10, MPFR_RNDN);
        mpfr_init(r38976);
        mpfr_init(r38977);
        mpfr_init(r38978);
        mpfr_init(r38979);
        mpfr_init_set_str(r38980, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r38981, "5", 10, MPFR_RNDN);
        mpfr_init(r38982);
        mpfr_init(r38983);
        mpfr_init_set_str(r38984, "1/3", 10, MPFR_RNDN);
        mpfr_init(r38985);
        mpfr_init(r38986);
        mpfr_init(r38987);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r38974, x, MPFR_RNDN);
        ;
        mpfr_pow(r38976, r38974, r38975, MPFR_RNDN);
        mpfr_mul(r38977, r38973, r38976, MPFR_RNDN);
        mpfr_exp(r38978, r38977, MPFR_RNDN);
        mpfr_log(r38979, r38978, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r38982, r38974, r38981, MPFR_RNDN);
        mpfr_mul(r38983, r38980, r38982, MPFR_RNDN);
        ;
        mpfr_mul(r38985, r38984, r38974, MPFR_RNDN);
        mpfr_add(r38986, r38983, r38985, MPFR_RNDN);
        mpfr_add(r38987, r38979, r38986, MPFR_RNDN);
        return mpfr_get_d(r38987, MPFR_RNDN);
}

static mpfr_t r38988, r38989, r38990, r38991, r38992, r38993, r38994, r38995, r38996, r38997, r38998, r38999, r39000, r39001, r39002;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r38988, "1/45", 10, MPFR_RNDN);
        mpfr_init(r38989);
        mpfr_init_set_str(r38990, "3", 10, MPFR_RNDN);
        mpfr_init(r38991);
        mpfr_init(r38992);
        mpfr_init(r38993);
        mpfr_init(r38994);
        mpfr_init_set_str(r38995, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r38996, "5", 10, MPFR_RNDN);
        mpfr_init(r38997);
        mpfr_init(r38998);
        mpfr_init_set_str(r38999, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39000);
        mpfr_init(r39001);
        mpfr_init(r39002);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r38989, x, MPFR_RNDN);
        ;
        mpfr_pow(r38991, r38989, r38990, MPFR_RNDN);
        mpfr_mul(r38992, r38988, r38991, MPFR_RNDN);
        mpfr_exp(r38993, r38992, MPFR_RNDN);
        mpfr_log(r38994, r38993, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r38997, r38989, r38996, MPFR_RNDN);
        mpfr_mul(r38998, r38995, r38997, MPFR_RNDN);
        ;
        mpfr_mul(r39000, r38999, r38989, MPFR_RNDN);
        mpfr_add(r39001, r38998, r39000, MPFR_RNDN);
        mpfr_add(r39002, r38994, r39001, MPFR_RNDN);
        return mpfr_get_d(r39002, MPFR_RNDN);
}

