#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 r39357 = 1;
        float r39358 = x;
        float r39359 = r39357 / r39358;
        float r39360 = tan(r39358);
        float r39361 = r39357 / r39360;
        float r39362 = r39359 - r39361;
        return r39362;
}

double f_id(double x) {
        double r39363 = 1;
        double r39364 = x;
        double r39365 = r39363 / r39364;
        double r39366 = tan(r39364);
        double r39367 = r39363 / r39366;
        double r39368 = r39365 - r39367;
        return r39368;
}


double f_of(float x) {
        float r39369 = 1/45;
        float r39370 = x;
        float r39371 = 3;
        float r39372 = pow(r39370, r39371);
        float r39373 = r39369 * r39372;
        float r39374 = exp(r39373);
        float r39375 = log(r39374);
        float r39376 = 2/945;
        float r39377 = 5;
        float r39378 = pow(r39370, r39377);
        float r39379 = r39376 * r39378;
        float r39380 = 1/3;
        float r39381 = r39380 * r39370;
        float r39382 = r39379 + r39381;
        float r39383 = r39375 + r39382;
        return r39383;
}

double f_od(double x) {
        double r39384 = 1/45;
        double r39385 = x;
        double r39386 = 3;
        double r39387 = pow(r39385, r39386);
        double r39388 = r39384 * r39387;
        double r39389 = exp(r39388);
        double r39390 = log(r39389);
        double r39391 = 2/945;
        double r39392 = 5;
        double r39393 = pow(r39385, r39392);
        double r39394 = r39391 * r39393;
        double r39395 = 1/3;
        double r39396 = r39395 * r39385;
        double r39397 = r39394 + r39396;
        double r39398 = r39390 + r39397;
        return r39398;
}

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 r39399, r39400, r39401, r39402, r39403, r39404;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39399, "1", 10, MPFR_RNDN);
        mpfr_init(r39400);
        mpfr_init(r39401);
        mpfr_init(r39402);
        mpfr_init(r39403);
        mpfr_init(r39404);
}

double f_im(double x) {
        ;
        mpfr_set_d(r39400, x, MPFR_RNDN);
        mpfr_div(r39401, r39399, r39400, MPFR_RNDN);
        mpfr_tan(r39402, r39400, MPFR_RNDN);
        mpfr_div(r39403, r39399, r39402, MPFR_RNDN);
        mpfr_sub(r39404, r39401, r39403, MPFR_RNDN);
        return mpfr_get_d(r39404, MPFR_RNDN);
}

static mpfr_t r39405, r39406, r39407, r39408, r39409, r39410, r39411, r39412, r39413, r39414, r39415, r39416, r39417, r39418, r39419;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39405, "1/45", 10, MPFR_RNDN);
        mpfr_init(r39406);
        mpfr_init_set_str(r39407, "3", 10, MPFR_RNDN);
        mpfr_init(r39408);
        mpfr_init(r39409);
        mpfr_init(r39410);
        mpfr_init(r39411);
        mpfr_init_set_str(r39412, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r39413, "5", 10, MPFR_RNDN);
        mpfr_init(r39414);
        mpfr_init(r39415);
        mpfr_init_set_str(r39416, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39417);
        mpfr_init(r39418);
        mpfr_init(r39419);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r39406, x, MPFR_RNDN);
        ;
        mpfr_pow(r39408, r39406, r39407, MPFR_RNDN);
        mpfr_mul(r39409, r39405, r39408, MPFR_RNDN);
        mpfr_exp(r39410, r39409, MPFR_RNDN);
        mpfr_log(r39411, r39410, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39414, r39406, r39413, MPFR_RNDN);
        mpfr_mul(r39415, r39412, r39414, MPFR_RNDN);
        ;
        mpfr_mul(r39417, r39416, r39406, MPFR_RNDN);
        mpfr_add(r39418, r39415, r39417, MPFR_RNDN);
        mpfr_add(r39419, r39411, r39418, MPFR_RNDN);
        return mpfr_get_d(r39419, MPFR_RNDN);
}

static mpfr_t r39420, r39421, r39422, r39423, r39424, r39425, r39426, r39427, r39428, r39429, r39430, r39431, r39432, r39433, r39434;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r39420, "1/45", 10, MPFR_RNDN);
        mpfr_init(r39421);
        mpfr_init_set_str(r39422, "3", 10, MPFR_RNDN);
        mpfr_init(r39423);
        mpfr_init(r39424);
        mpfr_init(r39425);
        mpfr_init(r39426);
        mpfr_init_set_str(r39427, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r39428, "5", 10, MPFR_RNDN);
        mpfr_init(r39429);
        mpfr_init(r39430);
        mpfr_init_set_str(r39431, "1/3", 10, MPFR_RNDN);
        mpfr_init(r39432);
        mpfr_init(r39433);
        mpfr_init(r39434);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r39421, x, MPFR_RNDN);
        ;
        mpfr_pow(r39423, r39421, r39422, MPFR_RNDN);
        mpfr_mul(r39424, r39420, r39423, MPFR_RNDN);
        mpfr_exp(r39425, r39424, MPFR_RNDN);
        mpfr_log(r39426, r39425, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r39429, r39421, r39428, MPFR_RNDN);
        mpfr_mul(r39430, r39427, r39429, MPFR_RNDN);
        ;
        mpfr_mul(r39432, r39431, r39421, MPFR_RNDN);
        mpfr_add(r39433, r39430, r39432, MPFR_RNDN);
        mpfr_add(r39434, r39426, r39433, MPFR_RNDN);
        return mpfr_get_d(r39434, MPFR_RNDN);
}

