#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 r53067 = 3.0;
        float r53068 = x;
        float r53069 = r53068 * r53067;
        float r53070 = r53069 * r53068;
        float r53071 = 4.0;
        float r53072 = r53068 * r53071;
        float r53073 = r53070 - r53072;
        float r53074 = 1.0;
        float r53075 = r53073 + r53074;
        float r53076 = r53067 * r53075;
        return r53076;
}

double f_id(double x) {
        double r53077 = 3.0;
        double r53078 = x;
        double r53079 = r53078 * r53077;
        double r53080 = r53079 * r53078;
        double r53081 = 4.0;
        double r53082 = r53078 * r53081;
        double r53083 = r53080 - r53082;
        double r53084 = 1.0;
        double r53085 = r53083 + r53084;
        double r53086 = r53077 * r53085;
        return r53086;
}


double f_of(float x) {
        float r53087 = 9.0;
        float r53088 = x;
        float r53089 = 2;
        float r53090 = pow(r53088, r53089);
        float r53091 = r53087 * r53090;
        float r53092 = 3.0;
        float r53093 = r53091 + r53092;
        float r53094 = 12.0;
        float r53095 = r53094 * r53088;
        float r53096 = r53093 - r53095;
        return r53096;
}

double f_od(double x) {
        double r53097 = 9.0;
        double r53098 = x;
        double r53099 = 2;
        double r53100 = pow(r53098, r53099);
        double r53101 = r53097 * r53100;
        double r53102 = 3.0;
        double r53103 = r53101 + r53102;
        double r53104 = 12.0;
        double r53105 = r53104 * r53098;
        double r53106 = r53103 - r53105;
        return r53106;
}

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 r53107, r53108, r53109, r53110, r53111, r53112, r53113, r53114, r53115, r53116;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53107, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53108);
        mpfr_init(r53109);
        mpfr_init(r53110);
        mpfr_init_set_str(r53111, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53112);
        mpfr_init(r53113);
        mpfr_init_set_str(r53114, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53115);
        mpfr_init(r53116);
}

double f_im(double x) {
        ;
        mpfr_set_d(r53108, x, MPFR_RNDN);
        mpfr_mul(r53109, r53108, r53107, MPFR_RNDN);
        mpfr_mul(r53110, r53109, r53108, MPFR_RNDN);
        ;
        mpfr_mul(r53112, r53108, r53111, MPFR_RNDN);
        mpfr_sub(r53113, r53110, r53112, MPFR_RNDN);
        ;
        mpfr_add(r53115, r53113, r53114, MPFR_RNDN);
        mpfr_mul(r53116, r53107, r53115, MPFR_RNDN);
        return mpfr_get_d(r53116, MPFR_RNDN);
}

static mpfr_t r53117, r53118, r53119, r53120, r53121, r53122, r53123, r53124, r53125, r53126;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53117, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53118);
        mpfr_init_set_str(r53119, "2", 10, MPFR_RNDN);
        mpfr_init(r53120);
        mpfr_init(r53121);
        mpfr_init_set_str(r53122, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53123);
        mpfr_init_set_str(r53124, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53125);
        mpfr_init(r53126);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r53118, x, MPFR_RNDN);
        ;
        mpfr_pow(r53120, r53118, r53119, MPFR_RNDN);
        mpfr_mul(r53121, r53117, r53120, MPFR_RNDN);
        ;
        mpfr_add(r53123, r53121, r53122, MPFR_RNDN);
        ;
        mpfr_mul(r53125, r53124, r53118, MPFR_RNDN);
        mpfr_sub(r53126, r53123, r53125, MPFR_RNDN);
        return mpfr_get_d(r53126, MPFR_RNDN);
}

static mpfr_t r53127, r53128, r53129, r53130, r53131, r53132, r53133, r53134, r53135, r53136;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53127, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53128);
        mpfr_init_set_str(r53129, "2", 10, MPFR_RNDN);
        mpfr_init(r53130);
        mpfr_init(r53131);
        mpfr_init_set_str(r53132, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53133);
        mpfr_init_set_str(r53134, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53135);
        mpfr_init(r53136);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r53128, x, MPFR_RNDN);
        ;
        mpfr_pow(r53130, r53128, r53129, MPFR_RNDN);
        mpfr_mul(r53131, r53127, r53130, MPFR_RNDN);
        ;
        mpfr_add(r53133, r53131, r53132, MPFR_RNDN);
        ;
        mpfr_mul(r53135, r53134, r53128, MPFR_RNDN);
        mpfr_sub(r53136, r53133, r53135, MPFR_RNDN);
        return mpfr_get_d(r53136, MPFR_RNDN);
}

