#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 r5181556 = 1.0f;
        float r5181557 = x;
        float r5181558 = r5181556 / r5181557;
        float r5181559 = tan(r5181557);
        float r5181560 = r5181556 / r5181559;
        float r5181561 = r5181558 - r5181560;
        return r5181561;
}

double f_id(double x) {
        double r5181562 = 1.0;
        double r5181563 = x;
        double r5181564 = r5181562 / r5181563;
        double r5181565 = tan(r5181563);
        double r5181566 = r5181562 / r5181565;
        double r5181567 = r5181564 - r5181566;
        return r5181567;
}


double f_of(float x) {
        float r5181568 = 0.022222222222222223f;
        float r5181569 = x;
        float r5181570 = r5181569 * (r5181569 * r5181569);
        float r5181571 = r5181568 * r5181570;
        float r5181572 = 5.0f;
        float r5181573 = pow(r5181569, r5181572);
        float r5181574 = 0.0021164021164021165f;
        float r5181575 = r5181573 * r5181574;
        float r5181576 = 0.3333333333333333f;
        float r5181577 = r5181569 * r5181576;
        float r5181578 = r5181575 + r5181577;
        float r5181579 = r5181571 + r5181578;
        return r5181579;
}

double f_od(double x) {
        double r5181580 = 0.022222222222222223;
        double r5181581 = x;
        double r5181582 = r5181581 * (r5181581 * r5181581);
        double r5181583 = r5181580 * r5181582;
        double r5181584 = 5.0;
        double r5181585 = pow(r5181581, r5181584);
        double r5181586 = 0.0021164021164021165;
        double r5181587 = r5181585 * r5181586;
        double r5181588 = 0.3333333333333333;
        double r5181589 = r5181581 * r5181588;
        double r5181590 = r5181587 + r5181589;
        double r5181591 = r5181583 + r5181590;
        return r5181591;
}

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 r5181592, r5181593, r5181594, r5181595, r5181596, r5181597;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r5181592, "1", 10, MPFR_RNDN);
        mpfr_init(r5181593);
        mpfr_init(r5181594);
        mpfr_init(r5181595);
        mpfr_init(r5181596);
        mpfr_init(r5181597);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5181593, x, MPFR_RNDN);
        mpfr_div(r5181594, r5181592, r5181593, MPFR_RNDN);
        mpfr_tan(r5181595, r5181593, MPFR_RNDN);
        mpfr_div(r5181596, r5181592, r5181595, MPFR_RNDN);
        mpfr_sub(r5181597, r5181594, r5181596, MPFR_RNDN);
        return mpfr_get_d(r5181597, MPFR_RNDN);
}

static mpfr_t r5181598, r5181599, r5181600, r5181601, r5181602, r5181603, r5181604, r5181605, r5181606, r5181607, r5181608, r5181609;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r5181598, "1/45", 10, MPFR_RNDN);
        mpfr_init(r5181599);
        mpfr_init(r5181600);
        mpfr_init(r5181601);
        mpfr_init_set_str(r5181602, "5", 10, MPFR_RNDN);
        mpfr_init(r5181603);
        mpfr_init_set_str(r5181604, "2/945", 10, MPFR_RNDN);
        mpfr_init(r5181605);
        mpfr_init_set_str(r5181606, "1/3", 10, MPFR_RNDN);
        mpfr_init(r5181607);
        mpfr_init(r5181608);
        mpfr_init(r5181609);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5181599, x, MPFR_RNDN);
        mpfr_mul(r5181600, r5181599, r5181599, MPFR_RNDN); mpfr_mul(r5181600, r5181600, r5181599, MPFR_RNDN);
        mpfr_mul(r5181601, r5181598, r5181600, MPFR_RNDN);
        ;
        mpfr_pow(r5181603, r5181599, r5181602, MPFR_RNDN);
        ;
        mpfr_mul(r5181605, r5181603, r5181604, MPFR_RNDN);
        ;
        mpfr_mul(r5181607, r5181599, r5181606, MPFR_RNDN);
        mpfr_add(r5181608, r5181605, r5181607, MPFR_RNDN);
        mpfr_add(r5181609, r5181601, r5181608, MPFR_RNDN);
        return mpfr_get_d(r5181609, MPFR_RNDN);
}

static mpfr_t r5181610, r5181611, r5181612, r5181613, r5181614, r5181615, r5181616, r5181617, r5181618, r5181619, r5181620, r5181621;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r5181610, "1/45", 10, MPFR_RNDN);
        mpfr_init(r5181611);
        mpfr_init(r5181612);
        mpfr_init(r5181613);
        mpfr_init_set_str(r5181614, "5", 10, MPFR_RNDN);
        mpfr_init(r5181615);
        mpfr_init_set_str(r5181616, "2/945", 10, MPFR_RNDN);
        mpfr_init(r5181617);
        mpfr_init_set_str(r5181618, "1/3", 10, MPFR_RNDN);
        mpfr_init(r5181619);
        mpfr_init(r5181620);
        mpfr_init(r5181621);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5181611, x, MPFR_RNDN);
        mpfr_mul(r5181612, r5181611, r5181611, MPFR_RNDN); mpfr_mul(r5181612, r5181612, r5181611, MPFR_RNDN);
        mpfr_mul(r5181613, r5181610, r5181612, MPFR_RNDN);
        ;
        mpfr_pow(r5181615, r5181611, r5181614, MPFR_RNDN);
        ;
        mpfr_mul(r5181617, r5181615, r5181616, MPFR_RNDN);
        ;
        mpfr_mul(r5181619, r5181611, r5181618, MPFR_RNDN);
        mpfr_add(r5181620, r5181617, r5181619, MPFR_RNDN);
        mpfr_add(r5181621, r5181613, r5181620, MPFR_RNDN);
        return mpfr_get_d(r5181621, MPFR_RNDN);
}

