#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 r24305 = 1;
        float r24306 = x;
        float r24307 = r24305 / r24306;
        float r24308 = tan(r24306);
        float r24309 = r24305 / r24308;
        float r24310 = r24307 - r24309;
        return r24310;
}

double f_id(double x) {
        double r24311 = 1;
        double r24312 = x;
        double r24313 = r24311 / r24312;
        double r24314 = tan(r24312);
        double r24315 = r24311 / r24314;
        double r24316 = r24313 - r24315;
        return r24316;
}


double f_of(float x) {
        float r24317 = 1/45;
        float r24318 = x;
        float r24319 = 3;
        float r24320 = pow(r24318, r24319);
        float r24321 = r24317 * r24320;
        float r24322 = 2/945;
        float r24323 = 5;
        float r24324 = pow(r24318, r24323);
        float r24325 = r24322 * r24324;
        float r24326 = 1/3;
        float r24327 = r24326 * r24318;
        float r24328 = r24325 + r24327;
        float r24329 = r24321 + r24328;
        return r24329;
}

double f_od(double x) {
        double r24330 = 1/45;
        double r24331 = x;
        double r24332 = 3;
        double r24333 = pow(r24331, r24332);
        double r24334 = r24330 * r24333;
        double r24335 = 2/945;
        double r24336 = 5;
        double r24337 = pow(r24331, r24336);
        double r24338 = r24335 * r24337;
        double r24339 = 1/3;
        double r24340 = r24339 * r24331;
        double r24341 = r24338 + r24340;
        double r24342 = r24334 + r24341;
        return r24342;
}

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 r24343, r24344, r24345, r24346, r24347, r24348;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r24343, "1", 10, MPFR_RNDN);
        mpfr_init(r24344);
        mpfr_init(r24345);
        mpfr_init(r24346);
        mpfr_init(r24347);
        mpfr_init(r24348);
}

double f_im(double x) {
        ;
        mpfr_set_d(r24344, x, MPFR_RNDN);
        mpfr_div(r24345, r24343, r24344, MPFR_RNDN);
        mpfr_tan(r24346, r24344, MPFR_RNDN);
        mpfr_div(r24347, r24343, r24346, MPFR_RNDN);
        mpfr_sub(r24348, r24345, r24347, MPFR_RNDN);
        return mpfr_get_d(r24348, MPFR_RNDN);
}

static mpfr_t r24349, r24350, r24351, r24352, r24353, r24354, r24355, r24356, r24357, r24358, r24359, r24360, r24361;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r24349, "1/45", 10, MPFR_RNDN);
        mpfr_init(r24350);
        mpfr_init_set_str(r24351, "3", 10, MPFR_RNDN);
        mpfr_init(r24352);
        mpfr_init(r24353);
        mpfr_init_set_str(r24354, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r24355, "5", 10, MPFR_RNDN);
        mpfr_init(r24356);
        mpfr_init(r24357);
        mpfr_init_set_str(r24358, "1/3", 10, MPFR_RNDN);
        mpfr_init(r24359);
        mpfr_init(r24360);
        mpfr_init(r24361);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r24350, x, MPFR_RNDN);
        ;
        mpfr_pow(r24352, r24350, r24351, MPFR_RNDN);
        mpfr_mul(r24353, r24349, r24352, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24356, r24350, r24355, MPFR_RNDN);
        mpfr_mul(r24357, r24354, r24356, MPFR_RNDN);
        ;
        mpfr_mul(r24359, r24358, r24350, MPFR_RNDN);
        mpfr_add(r24360, r24357, r24359, MPFR_RNDN);
        mpfr_add(r24361, r24353, r24360, MPFR_RNDN);
        return mpfr_get_d(r24361, MPFR_RNDN);
}

static mpfr_t r24362, r24363, r24364, r24365, r24366, r24367, r24368, r24369, r24370, r24371, r24372, r24373, r24374;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r24362, "1/45", 10, MPFR_RNDN);
        mpfr_init(r24363);
        mpfr_init_set_str(r24364, "3", 10, MPFR_RNDN);
        mpfr_init(r24365);
        mpfr_init(r24366);
        mpfr_init_set_str(r24367, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r24368, "5", 10, MPFR_RNDN);
        mpfr_init(r24369);
        mpfr_init(r24370);
        mpfr_init_set_str(r24371, "1/3", 10, MPFR_RNDN);
        mpfr_init(r24372);
        mpfr_init(r24373);
        mpfr_init(r24374);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r24363, x, MPFR_RNDN);
        ;
        mpfr_pow(r24365, r24363, r24364, MPFR_RNDN);
        mpfr_mul(r24366, r24362, r24365, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24369, r24363, r24368, MPFR_RNDN);
        mpfr_mul(r24370, r24367, r24369, MPFR_RNDN);
        ;
        mpfr_mul(r24372, r24371, r24363, MPFR_RNDN);
        mpfr_add(r24373, r24370, r24372, MPFR_RNDN);
        mpfr_add(r24374, r24366, r24373, MPFR_RNDN);
        return mpfr_get_d(r24374, MPFR_RNDN);
}

