#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 r10605 = 1;
        float r10606 = x;
        float r10607 = r10605 / r10606;
        float r10608 = tan(r10606);
        float r10609 = r10605 / r10608;
        float r10610 = r10607 - r10609;
        return r10610;
}

double f_id(double x) {
        double r10611 = 1;
        double r10612 = x;
        double r10613 = r10611 / r10612;
        double r10614 = tan(r10612);
        double r10615 = r10611 / r10614;
        double r10616 = r10613 - r10615;
        return r10616;
}


double f_of(float x) {
        float r10617 = x;
        float r10618 = 1/45;
        float r10619 = r10617 * r10618;
        float r10620 = 15;
        float r10621 = 2/945;
        float r10622 = 5;
        float r10623 = pow(r10617, r10622);
        float r10624 = r10617 * r10617;
        float r10625 = r10624 * r10619;
        float r10626 = fma(r10621, r10623, r10625);
        float r10627 = fma(r10619, r10620, r10626);
        return r10627;
}

double f_od(double x) {
        double r10628 = x;
        double r10629 = 1/45;
        double r10630 = r10628 * r10629;
        double r10631 = 15;
        double r10632 = 2/945;
        double r10633 = 5;
        double r10634 = pow(r10628, r10633);
        double r10635 = r10628 * r10628;
        double r10636 = r10635 * r10630;
        double r10637 = fma(r10632, r10634, r10636);
        double r10638 = fma(r10630, r10631, r10637);
        return r10638;
}

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 r10639, r10640, r10641, r10642, r10643, r10644;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r10639, "1", 10, MPFR_RNDN);
        mpfr_init(r10640);
        mpfr_init(r10641);
        mpfr_init(r10642);
        mpfr_init(r10643);
        mpfr_init(r10644);
}

double f_im(double x) {
        ;
        mpfr_set_d(r10640, x, MPFR_RNDN);
        mpfr_div(r10641, r10639, r10640, MPFR_RNDN);
        mpfr_tan(r10642, r10640, MPFR_RNDN);
        mpfr_div(r10643, r10639, r10642, MPFR_RNDN);
        mpfr_sub(r10644, r10641, r10643, MPFR_RNDN);
        return mpfr_get_d(r10644, MPFR_RNDN);
}

static mpfr_t r10645, r10646, r10647, r10648, r10649, r10650, r10651, r10652, r10653, r10654, r10655;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10645);
        mpfr_init_set_str(r10646, "1/45", 10, MPFR_RNDN);
        mpfr_init(r10647);
        mpfr_init_set_str(r10648, "15", 10, MPFR_RNDN);
        mpfr_init_set_str(r10649, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r10650, "5", 10, MPFR_RNDN);
        mpfr_init(r10651);
        mpfr_init(r10652);
        mpfr_init(r10653);
        mpfr_init(r10654);
        mpfr_init(r10655);
}

double f_fm(double x) {
        mpfr_set_d(r10645, x, MPFR_RNDN);
        ;
        mpfr_mul(r10647, r10645, r10646, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r10651, r10645, r10650, MPFR_RNDN);
        mpfr_mul(r10652, r10645, r10645, MPFR_RNDN);
        mpfr_mul(r10653, r10652, r10647, MPFR_RNDN);
        mpfr_fma(r10654, r10649, r10651, r10653, MPFR_RNDN);
        mpfr_fma(r10655, r10647, r10648, r10654, MPFR_RNDN);
        return mpfr_get_d(r10655, MPFR_RNDN);
}

static mpfr_t r10656, r10657, r10658, r10659, r10660, r10661, r10662, r10663, r10664, r10665, r10666;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r10656);
        mpfr_init_set_str(r10657, "1/45", 10, MPFR_RNDN);
        mpfr_init(r10658);
        mpfr_init_set_str(r10659, "15", 10, MPFR_RNDN);
        mpfr_init_set_str(r10660, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r10661, "5", 10, MPFR_RNDN);
        mpfr_init(r10662);
        mpfr_init(r10663);
        mpfr_init(r10664);
        mpfr_init(r10665);
        mpfr_init(r10666);
}

double f_dm(double x) {
        mpfr_set_d(r10656, x, MPFR_RNDN);
        ;
        mpfr_mul(r10658, r10656, r10657, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r10662, r10656, r10661, MPFR_RNDN);
        mpfr_mul(r10663, r10656, r10656, MPFR_RNDN);
        mpfr_mul(r10664, r10663, r10658, MPFR_RNDN);
        mpfr_fma(r10665, r10660, r10662, r10664, MPFR_RNDN);
        mpfr_fma(r10666, r10658, r10659, r10665, MPFR_RNDN);
        return mpfr_get_d(r10666, MPFR_RNDN);
}

