#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 r26416 = 1;
        float r26417 = x;
        float r26418 = r26416 / r26417;
        float r26419 = tan(r26417);
        float r26420 = r26416 / r26419;
        float r26421 = r26418 - r26420;
        return r26421;
}

double f_id(double x) {
        double r26422 = 1;
        double r26423 = x;
        double r26424 = r26422 / r26423;
        double r26425 = tan(r26423);
        double r26426 = r26422 / r26425;
        double r26427 = r26424 - r26426;
        return r26427;
}


double f_of(float x) {
        float r26428 = x;
        float r26429 = r26428 * r26428;
        float r26430 = 1/45;
        float r26431 = 1/3;
        float r26432 = fma(r26429, r26430, r26431);
        float r26433 = exp(r26432);
        float r26434 = log(r26433);
        float r26435 = 2/945;
        float r26436 = 5;
        float r26437 = pow(r26428, r26436);
        float r26438 = r26435 * r26437;
        float r26439 = fma(r26434, r26428, r26438);
        return r26439;
}

double f_od(double x) {
        double r26440 = x;
        double r26441 = r26440 * r26440;
        double r26442 = 1/45;
        double r26443 = 1/3;
        double r26444 = fma(r26441, r26442, r26443);
        double r26445 = exp(r26444);
        double r26446 = log(r26445);
        double r26447 = 2/945;
        double r26448 = 5;
        double r26449 = pow(r26440, r26448);
        double r26450 = r26447 * r26449;
        double r26451 = fma(r26446, r26440, r26450);
        return r26451;
}

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 r26452, r26453, r26454, r26455, r26456, r26457;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2384);
        mpfr_init_set_str(r26452, "1", 10, MPFR_RNDN);
        mpfr_init(r26453);
        mpfr_init(r26454);
        mpfr_init(r26455);
        mpfr_init(r26456);
        mpfr_init(r26457);
}

double f_im(double x) {
        ;
        mpfr_set_d(r26453, x, MPFR_RNDN);
        mpfr_div(r26454, r26452, r26453, MPFR_RNDN);
        mpfr_tan(r26455, r26453, MPFR_RNDN);
        mpfr_div(r26456, r26452, r26455, MPFR_RNDN);
        mpfr_sub(r26457, r26454, r26456, MPFR_RNDN);
        return mpfr_get_d(r26457, MPFR_RNDN);
}

static mpfr_t r26458, r26459, r26460, r26461, r26462, r26463, r26464, r26465, r26466, r26467, r26468, r26469;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26458);
        mpfr_init(r26459);
        mpfr_init_set_str(r26460, "1/45", 10, MPFR_RNDN);
        mpfr_init_set_str(r26461, "1/3", 10, MPFR_RNDN);
        mpfr_init(r26462);
        mpfr_init(r26463);
        mpfr_init(r26464);
        mpfr_init_set_str(r26465, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r26466, "5", 10, MPFR_RNDN);
        mpfr_init(r26467);
        mpfr_init(r26468);
        mpfr_init(r26469);
}

double f_fm(double x) {
        mpfr_set_d(r26458, x, MPFR_RNDN);
        mpfr_mul(r26459, r26458, r26458, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r26462, r26459, r26460, r26461, MPFR_RNDN);
        mpfr_exp(r26463, r26462, MPFR_RNDN);
        mpfr_log(r26464, r26463, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r26467, r26458, r26466, MPFR_RNDN);
        mpfr_mul(r26468, r26465, r26467, MPFR_RNDN);
        mpfr_fma(r26469, r26464, r26458, r26468, MPFR_RNDN);
        return mpfr_get_d(r26469, MPFR_RNDN);
}

static mpfr_t r26470, r26471, r26472, r26473, r26474, r26475, r26476, r26477, r26478, r26479, r26480, r26481;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2384);
        mpfr_init(r26470);
        mpfr_init(r26471);
        mpfr_init_set_str(r26472, "1/45", 10, MPFR_RNDN);
        mpfr_init_set_str(r26473, "1/3", 10, MPFR_RNDN);
        mpfr_init(r26474);
        mpfr_init(r26475);
        mpfr_init(r26476);
        mpfr_init_set_str(r26477, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r26478, "5", 10, MPFR_RNDN);
        mpfr_init(r26479);
        mpfr_init(r26480);
        mpfr_init(r26481);
}

double f_dm(double x) {
        mpfr_set_d(r26470, x, MPFR_RNDN);
        mpfr_mul(r26471, r26470, r26470, MPFR_RNDN);
        ;
        ;
        mpfr_fma(r26474, r26471, r26472, r26473, MPFR_RNDN);
        mpfr_exp(r26475, r26474, MPFR_RNDN);
        mpfr_log(r26476, r26475, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r26479, r26470, r26478, MPFR_RNDN);
        mpfr_mul(r26480, r26477, r26479, MPFR_RNDN);
        mpfr_fma(r26481, r26476, r26470, r26480, MPFR_RNDN);
        return mpfr_get_d(r26481, MPFR_RNDN);
}

