#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 r34881 = 1.0f;
        float r34882 = x;
        float r34883 = r34881 / r34882;
        float r34884 = tan(r34882);
        float r34885 = r34881 / r34884;
        float r34886 = r34883 - r34885;
        return r34886;
}

double f_id(double x) {
        double r34887 = 1.0;
        double r34888 = x;
        double r34889 = r34887 / r34888;
        double r34890 = tan(r34888);
        double r34891 = r34887 / r34890;
        double r34892 = r34889 - r34891;
        return r34892;
}


double f_of(float x) {
        float r34893 = 0.022222222222222223f;
        float r34894 = x;
        float r34895 = r34894 * (r34894 * r34894);
        float r34896 = r34893 * r34895;
        float r34897 = 5.0f;
        float r34898 = pow(r34894, r34897);
        float r34899 = 0.0021164021164021165f;
        float r34900 = r34898 * r34899;
        float r34901 = 0.3333333333333333f;
        float r34902 = r34894 * r34901;
        float r34903 = r34900 + r34902;
        float r34904 = r34896 + r34903;
        return r34904;
}

double f_od(double x) {
        double r34905 = 0.022222222222222223;
        double r34906 = x;
        double r34907 = r34906 * (r34906 * r34906);
        double r34908 = r34905 * r34907;
        double r34909 = 5.0;
        double r34910 = pow(r34906, r34909);
        double r34911 = 0.0021164021164021165;
        double r34912 = r34910 * r34911;
        double r34913 = 0.3333333333333333;
        double r34914 = r34906 * r34913;
        double r34915 = r34912 + r34914;
        double r34916 = r34908 + r34915;
        return r34916;
}

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 r34917, r34918, r34919, r34920, r34921, r34922;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r34917, "1", 10, MPFR_RNDN);
        mpfr_init(r34918);
        mpfr_init(r34919);
        mpfr_init(r34920);
        mpfr_init(r34921);
        mpfr_init(r34922);
}

double f_im(double x) {
        ;
        mpfr_set_d(r34918, x, MPFR_RNDN);
        mpfr_div(r34919, r34917, r34918, MPFR_RNDN);
        mpfr_tan(r34920, r34918, MPFR_RNDN);
        mpfr_div(r34921, r34917, r34920, MPFR_RNDN);
        mpfr_sub(r34922, r34919, r34921, MPFR_RNDN);
        return mpfr_get_d(r34922, MPFR_RNDN);
}

static mpfr_t r34923, r34924, r34925, r34926, r34927, r34928, r34929, r34930, r34931, r34932, r34933, r34934;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r34923, "1/45", 10, MPFR_RNDN);
        mpfr_init(r34924);
        mpfr_init(r34925);
        mpfr_init(r34926);
        mpfr_init_set_str(r34927, "5", 10, MPFR_RNDN);
        mpfr_init(r34928);
        mpfr_init_set_str(r34929, "2/945", 10, MPFR_RNDN);
        mpfr_init(r34930);
        mpfr_init_set_str(r34931, "1/3", 10, MPFR_RNDN);
        mpfr_init(r34932);
        mpfr_init(r34933);
        mpfr_init(r34934);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r34924, x, MPFR_RNDN);
        mpfr_mul(r34925, r34924, r34924, MPFR_RNDN); mpfr_mul(r34925, r34925, r34924, MPFR_RNDN);
        mpfr_mul(r34926, r34923, r34925, MPFR_RNDN);
        ;
        mpfr_pow(r34928, r34924, r34927, MPFR_RNDN);
        ;
        mpfr_mul(r34930, r34928, r34929, MPFR_RNDN);
        ;
        mpfr_mul(r34932, r34924, r34931, MPFR_RNDN);
        mpfr_add(r34933, r34930, r34932, MPFR_RNDN);
        mpfr_add(r34934, r34926, r34933, MPFR_RNDN);
        return mpfr_get_d(r34934, MPFR_RNDN);
}

static mpfr_t r34935, r34936, r34937, r34938, r34939, r34940, r34941, r34942, r34943, r34944, r34945, r34946;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r34935, "1/45", 10, MPFR_RNDN);
        mpfr_init(r34936);
        mpfr_init(r34937);
        mpfr_init(r34938);
        mpfr_init_set_str(r34939, "5", 10, MPFR_RNDN);
        mpfr_init(r34940);
        mpfr_init_set_str(r34941, "2/945", 10, MPFR_RNDN);
        mpfr_init(r34942);
        mpfr_init_set_str(r34943, "1/3", 10, MPFR_RNDN);
        mpfr_init(r34944);
        mpfr_init(r34945);
        mpfr_init(r34946);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r34936, x, MPFR_RNDN);
        mpfr_mul(r34937, r34936, r34936, MPFR_RNDN); mpfr_mul(r34937, r34937, r34936, MPFR_RNDN);
        mpfr_mul(r34938, r34935, r34937, MPFR_RNDN);
        ;
        mpfr_pow(r34940, r34936, r34939, MPFR_RNDN);
        ;
        mpfr_mul(r34942, r34940, r34941, MPFR_RNDN);
        ;
        mpfr_mul(r34944, r34936, r34943, MPFR_RNDN);
        mpfr_add(r34945, r34942, r34944, MPFR_RNDN);
        mpfr_add(r34946, r34938, r34945, MPFR_RNDN);
        return mpfr_get_d(r34946, MPFR_RNDN);
}

