#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 r26927 = 1;
        float r26928 = x;
        float r26929 = r26927 / r26928;
        float r26930 = tan(r26928);
        float r26931 = r26927 / r26930;
        float r26932 = r26929 - r26931;
        return r26932;
}

double f_id(double x) {
        double r26933 = 1;
        double r26934 = x;
        double r26935 = r26933 / r26934;
        double r26936 = tan(r26934);
        double r26937 = r26933 / r26936;
        double r26938 = r26935 - r26937;
        return r26938;
}


double f_of(float x) {
        float r26939 = x;
        float r26940 = r26939 * r26939;
        float r26941 = 1/45;
        float r26942 = 1/3;
        float r26943 = fma(r26940, r26941, r26942);
        float r26944 = 2/945;
        float r26945 = 5;
        float r26946 = pow(r26939, r26945);
        float r26947 = r26944 * r26946;
        float r26948 = fma(r26943, r26939, r26947);
        return r26948;
}

double f_od(double x) {
        double r26949 = x;
        double r26950 = r26949 * r26949;
        double r26951 = 1/45;
        double r26952 = 1/3;
        double r26953 = fma(r26950, r26951, r26952);
        double r26954 = 2/945;
        double r26955 = 5;
        double r26956 = pow(r26949, r26955);
        double r26957 = r26954 * r26956;
        double r26958 = fma(r26953, r26949, r26957);
        return r26958;
}

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 r26959, r26960, r26961, r26962, r26963, r26964;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r26959, "1", 10, MPFR_RNDN);
        mpfr_init(r26960);
        mpfr_init(r26961);
        mpfr_init(r26962);
        mpfr_init(r26963);
        mpfr_init(r26964);
}

double f_im(double x) {
        ;
        mpfr_set_d(r26960, x, MPFR_RNDN);
        mpfr_div(r26961, r26959, r26960, MPFR_RNDN);
        mpfr_tan(r26962, r26960, MPFR_RNDN);
        mpfr_div(r26963, r26959, r26962, MPFR_RNDN);
        mpfr_sub(r26964, r26961, r26963, MPFR_RNDN);
        return mpfr_get_d(r26964, MPFR_RNDN);
}

static mpfr_t r26965, r26966, r26967, r26968, r26969, r26970, r26971, r26972, r26973, r26974;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26965);
        mpfr_init(r26966);
        mpfr_init_set_str(r26967, "1/45", 10, MPFR_RNDN);
        mpfr_init_set_str(r26968, "1/3", 10, MPFR_RNDN);
        mpfr_init(r26969);
        mpfr_init_set_str(r26970, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r26971, "5", 10, MPFR_RNDN);
        mpfr_init(r26972);
        mpfr_init(r26973);
        mpfr_init(r26974);
}

double f_fm(double x) {
        mpfr_set_d(r26965, x, MPFR_RNDN);
        mpfr_mul(r26966, r26965, r26965, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r26969, r26966, r26967, r26968, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r26972, r26965, r26971, MPFR_RNDN);
        mpfr_mul(r26973, r26970, r26972, MPFR_RNDN);
        mpfr_fma(r26974, r26969, r26965, r26973, MPFR_RNDN);
        return mpfr_get_d(r26974, MPFR_RNDN);
}

static mpfr_t r26975, r26976, r26977, r26978, r26979, r26980, r26981, r26982, r26983, r26984;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26975);
        mpfr_init(r26976);
        mpfr_init_set_str(r26977, "1/45", 10, MPFR_RNDN);
        mpfr_init_set_str(r26978, "1/3", 10, MPFR_RNDN);
        mpfr_init(r26979);
        mpfr_init_set_str(r26980, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r26981, "5", 10, MPFR_RNDN);
        mpfr_init(r26982);
        mpfr_init(r26983);
        mpfr_init(r26984);
}

double f_dm(double x) {
        mpfr_set_d(r26975, x, MPFR_RNDN);
        mpfr_mul(r26976, r26975, r26975, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r26979, r26976, r26977, r26978, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r26982, r26975, r26981, MPFR_RNDN);
        mpfr_mul(r26983, r26980, r26982, MPFR_RNDN);
        mpfr_fma(r26984, r26979, r26975, r26983, MPFR_RNDN);
        return mpfr_get_d(r26984, MPFR_RNDN);
}

