#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 r6215522 = 1;
        float r6215523 = x;
        float r6215524 = r6215522 / r6215523;
        float r6215525 = tan(r6215523);
        float r6215526 = r6215522 / r6215525;
        float r6215527 = r6215524 - r6215526;
        return r6215527;
}

double f_id(double x) {
        double r6215528 = 1;
        double r6215529 = x;
        double r6215530 = r6215528 / r6215529;
        double r6215531 = tan(r6215529);
        double r6215532 = r6215528 / r6215531;
        double r6215533 = r6215530 - r6215532;
        return r6215533;
}


double f_of(float x) {
        float r6215534 = 1/45;
        float r6215535 = x;
        float r6215536 = 3;
        float r6215537 = pow(r6215535, r6215536);
        float r6215538 = r6215534 * r6215537;
        float r6215539 = 2/945;
        float r6215540 = 5;
        float r6215541 = pow(r6215535, r6215540);
        float r6215542 = r6215539 * r6215541;
        float r6215543 = 1/3;
        float r6215544 = r6215543 * r6215535;
        float r6215545 = r6215542 + r6215544;
        float r6215546 = r6215538 + r6215545;
        return r6215546;
}

double f_od(double x) {
        double r6215547 = 1/45;
        double r6215548 = x;
        double r6215549 = 3;
        double r6215550 = pow(r6215548, r6215549);
        double r6215551 = r6215547 * r6215550;
        double r6215552 = 2/945;
        double r6215553 = 5;
        double r6215554 = pow(r6215548, r6215553);
        double r6215555 = r6215552 * r6215554;
        double r6215556 = 1/3;
        double r6215557 = r6215556 * r6215548;
        double r6215558 = r6215555 + r6215557;
        double r6215559 = r6215551 + r6215558;
        return r6215559;
}

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 r6215560, r6215561, r6215562, r6215563, r6215564, r6215565;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r6215560, "1", 10, MPFR_RNDN);
        mpfr_init(r6215561);
        mpfr_init(r6215562);
        mpfr_init(r6215563);
        mpfr_init(r6215564);
        mpfr_init(r6215565);
}

double f_im(double x) {
        ;
        mpfr_set_d(r6215561, x, MPFR_RNDN);
        mpfr_div(r6215562, r6215560, r6215561, MPFR_RNDN);
        mpfr_tan(r6215563, r6215561, MPFR_RNDN);
        mpfr_div(r6215564, r6215560, r6215563, MPFR_RNDN);
        mpfr_sub(r6215565, r6215562, r6215564, MPFR_RNDN);
        return mpfr_get_d(r6215565, MPFR_RNDN);
}

static mpfr_t r6215566, r6215567, r6215568, r6215569, r6215570, r6215571, r6215572, r6215573, r6215574, r6215575, r6215576, r6215577, r6215578;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r6215566, "1/45", 10, MPFR_RNDN);
        mpfr_init(r6215567);
        mpfr_init_set_str(r6215568, "3", 10, MPFR_RNDN);
        mpfr_init(r6215569);
        mpfr_init(r6215570);
        mpfr_init_set_str(r6215571, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r6215572, "5", 10, MPFR_RNDN);
        mpfr_init(r6215573);
        mpfr_init(r6215574);
        mpfr_init_set_str(r6215575, "1/3", 10, MPFR_RNDN);
        mpfr_init(r6215576);
        mpfr_init(r6215577);
        mpfr_init(r6215578);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r6215567, x, MPFR_RNDN);
        ;
        mpfr_pow(r6215569, r6215567, r6215568, MPFR_RNDN);
        mpfr_mul(r6215570, r6215566, r6215569, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r6215573, r6215567, r6215572, MPFR_RNDN);
        mpfr_mul(r6215574, r6215571, r6215573, MPFR_RNDN);
        ;
        mpfr_mul(r6215576, r6215575, r6215567, MPFR_RNDN);
        mpfr_add(r6215577, r6215574, r6215576, MPFR_RNDN);
        mpfr_add(r6215578, r6215570, r6215577, MPFR_RNDN);
        return mpfr_get_d(r6215578, MPFR_RNDN);
}

static mpfr_t r6215579, r6215580, r6215581, r6215582, r6215583, r6215584, r6215585, r6215586, r6215587, r6215588, r6215589, r6215590, r6215591;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r6215579, "1/45", 10, MPFR_RNDN);
        mpfr_init(r6215580);
        mpfr_init_set_str(r6215581, "3", 10, MPFR_RNDN);
        mpfr_init(r6215582);
        mpfr_init(r6215583);
        mpfr_init_set_str(r6215584, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r6215585, "5", 10, MPFR_RNDN);
        mpfr_init(r6215586);
        mpfr_init(r6215587);
        mpfr_init_set_str(r6215588, "1/3", 10, MPFR_RNDN);
        mpfr_init(r6215589);
        mpfr_init(r6215590);
        mpfr_init(r6215591);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r6215580, x, MPFR_RNDN);
        ;
        mpfr_pow(r6215582, r6215580, r6215581, MPFR_RNDN);
        mpfr_mul(r6215583, r6215579, r6215582, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r6215586, r6215580, r6215585, MPFR_RNDN);
        mpfr_mul(r6215587, r6215584, r6215586, MPFR_RNDN);
        ;
        mpfr_mul(r6215589, r6215588, r6215580, MPFR_RNDN);
        mpfr_add(r6215590, r6215587, r6215589, MPFR_RNDN);
        mpfr_add(r6215591, r6215583, r6215590, MPFR_RNDN);
        return mpfr_get_d(r6215591, MPFR_RNDN);
}

