#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Diagrams.Tangent:$catParam from diagrams-lib-1.3.0.3, D";

double f_if(float x) {
        float r53289 = 3.0;
        float r53290 = x;
        float r53291 = r53290 * r53289;
        float r53292 = r53291 * r53290;
        float r53293 = 4.0;
        float r53294 = r53290 * r53293;
        float r53295 = r53292 - r53294;
        float r53296 = 1.0;
        float r53297 = r53295 + r53296;
        float r53298 = r53289 * r53297;
        return r53298;
}

double f_id(double x) {
        double r53299 = 3.0;
        double r53300 = x;
        double r53301 = r53300 * r53299;
        double r53302 = r53301 * r53300;
        double r53303 = 4.0;
        double r53304 = r53300 * r53303;
        double r53305 = r53302 - r53304;
        double r53306 = 1.0;
        double r53307 = r53305 + r53306;
        double r53308 = r53299 * r53307;
        return r53308;
}


double f_of(float x) {
        float r53309 = 9.0;
        float r53310 = x;
        float r53311 = 2;
        float r53312 = pow(r53310, r53311);
        float r53313 = r53309 * r53312;
        float r53314 = 3.0;
        float r53315 = r53313 + r53314;
        float r53316 = 12.0;
        float r53317 = r53316 * r53310;
        float r53318 = r53315 - r53317;
        return r53318;
}

double f_od(double x) {
        double r53319 = 9.0;
        double r53320 = x;
        double r53321 = 2;
        double r53322 = pow(r53320, r53321);
        double r53323 = r53319 * r53322;
        double r53324 = 3.0;
        double r53325 = r53323 + r53324;
        double r53326 = 12.0;
        double r53327 = r53326 * r53320;
        double r53328 = r53325 - r53327;
        return r53328;
}

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 r53329, r53330, r53331, r53332, r53333, r53334, r53335, r53336, r53337, r53338;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53329, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53330);
        mpfr_init(r53331);
        mpfr_init(r53332);
        mpfr_init_set_str(r53333, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53334);
        mpfr_init(r53335);
        mpfr_init_set_str(r53336, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53337);
        mpfr_init(r53338);
}

double f_im(double x) {
        ;
        mpfr_set_d(r53330, x, MPFR_RNDN);
        mpfr_mul(r53331, r53330, r53329, MPFR_RNDN);
        mpfr_mul(r53332, r53331, r53330, MPFR_RNDN);
        ;
        mpfr_mul(r53334, r53330, r53333, MPFR_RNDN);
        mpfr_sub(r53335, r53332, r53334, MPFR_RNDN);
        ;
        mpfr_add(r53337, r53335, r53336, MPFR_RNDN);
        mpfr_mul(r53338, r53329, r53337, MPFR_RNDN);
        return mpfr_get_d(r53338, MPFR_RNDN);
}

static mpfr_t r53339, r53340, r53341, r53342, r53343, r53344, r53345, r53346, r53347, r53348;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53339, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53340);
        mpfr_init_set_str(r53341, "2", 10, MPFR_RNDN);
        mpfr_init(r53342);
        mpfr_init(r53343);
        mpfr_init_set_str(r53344, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53345);
        mpfr_init_set_str(r53346, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53347);
        mpfr_init(r53348);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r53340, x, MPFR_RNDN);
        ;
        mpfr_pow(r53342, r53340, r53341, MPFR_RNDN);
        mpfr_mul(r53343, r53339, r53342, MPFR_RNDN);
        ;
        mpfr_add(r53345, r53343, r53344, MPFR_RNDN);
        ;
        mpfr_mul(r53347, r53346, r53340, MPFR_RNDN);
        mpfr_sub(r53348, r53345, r53347, MPFR_RNDN);
        return mpfr_get_d(r53348, MPFR_RNDN);
}

static mpfr_t r53349, r53350, r53351, r53352, r53353, r53354, r53355, r53356, r53357, r53358;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53349, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53350);
        mpfr_init_set_str(r53351, "2", 10, MPFR_RNDN);
        mpfr_init(r53352);
        mpfr_init(r53353);
        mpfr_init_set_str(r53354, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53355);
        mpfr_init_set_str(r53356, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53357);
        mpfr_init(r53358);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r53350, x, MPFR_RNDN);
        ;
        mpfr_pow(r53352, r53350, r53351, MPFR_RNDN);
        mpfr_mul(r53353, r53349, r53352, MPFR_RNDN);
        ;
        mpfr_add(r53355, r53353, r53354, MPFR_RNDN);
        ;
        mpfr_mul(r53357, r53356, r53350, MPFR_RNDN);
        mpfr_sub(r53358, r53355, r53357, MPFR_RNDN);
        return mpfr_get_d(r53358, MPFR_RNDN);
}

