#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 r53449 = 3.0;
        float r53450 = x;
        float r53451 = r53450 * r53449;
        float r53452 = r53451 * r53450;
        float r53453 = 4.0;
        float r53454 = r53450 * r53453;
        float r53455 = r53452 - r53454;
        float r53456 = 1.0;
        float r53457 = r53455 + r53456;
        float r53458 = r53449 * r53457;
        return r53458;
}

double f_id(double x) {
        double r53459 = 3.0;
        double r53460 = x;
        double r53461 = r53460 * r53459;
        double r53462 = r53461 * r53460;
        double r53463 = 4.0;
        double r53464 = r53460 * r53463;
        double r53465 = r53462 - r53464;
        double r53466 = 1.0;
        double r53467 = r53465 + r53466;
        double r53468 = r53459 * r53467;
        return r53468;
}


double f_of(float x) {
        float r53469 = 9.0;
        float r53470 = x;
        float r53471 = 2;
        float r53472 = pow(r53470, r53471);
        float r53473 = r53469 * r53472;
        float r53474 = 3.0;
        float r53475 = r53473 + r53474;
        float r53476 = 12.0;
        float r53477 = r53476 * r53470;
        float r53478 = r53475 - r53477;
        return r53478;
}

double f_od(double x) {
        double r53479 = 9.0;
        double r53480 = x;
        double r53481 = 2;
        double r53482 = pow(r53480, r53481);
        double r53483 = r53479 * r53482;
        double r53484 = 3.0;
        double r53485 = r53483 + r53484;
        double r53486 = 12.0;
        double r53487 = r53486 * r53480;
        double r53488 = r53485 - r53487;
        return r53488;
}

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 r53489, r53490, r53491, r53492, r53493, r53494, r53495, r53496, r53497, r53498;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53489, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53490);
        mpfr_init(r53491);
        mpfr_init(r53492);
        mpfr_init_set_str(r53493, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53494);
        mpfr_init(r53495);
        mpfr_init_set_str(r53496, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53497);
        mpfr_init(r53498);
}

double f_im(double x) {
        ;
        mpfr_set_d(r53490, x, MPFR_RNDN);
        mpfr_mul(r53491, r53490, r53489, MPFR_RNDN);
        mpfr_mul(r53492, r53491, r53490, MPFR_RNDN);
        ;
        mpfr_mul(r53494, r53490, r53493, MPFR_RNDN);
        mpfr_sub(r53495, r53492, r53494, MPFR_RNDN);
        ;
        mpfr_add(r53497, r53495, r53496, MPFR_RNDN);
        mpfr_mul(r53498, r53489, r53497, MPFR_RNDN);
        return mpfr_get_d(r53498, MPFR_RNDN);
}

static mpfr_t r53499, r53500, r53501, r53502, r53503, r53504, r53505, r53506, r53507, r53508;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53499, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53500);
        mpfr_init_set_str(r53501, "2", 10, MPFR_RNDN);
        mpfr_init(r53502);
        mpfr_init(r53503);
        mpfr_init_set_str(r53504, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53505);
        mpfr_init_set_str(r53506, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53507);
        mpfr_init(r53508);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r53500, x, MPFR_RNDN);
        ;
        mpfr_pow(r53502, r53500, r53501, MPFR_RNDN);
        mpfr_mul(r53503, r53499, r53502, MPFR_RNDN);
        ;
        mpfr_add(r53505, r53503, r53504, MPFR_RNDN);
        ;
        mpfr_mul(r53507, r53506, r53500, MPFR_RNDN);
        mpfr_sub(r53508, r53505, r53507, MPFR_RNDN);
        return mpfr_get_d(r53508, MPFR_RNDN);
}

static mpfr_t r53509, r53510, r53511, r53512, r53513, r53514, r53515, r53516, r53517, r53518;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53509, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53510);
        mpfr_init_set_str(r53511, "2", 10, MPFR_RNDN);
        mpfr_init(r53512);
        mpfr_init(r53513);
        mpfr_init_set_str(r53514, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53515);
        mpfr_init_set_str(r53516, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53517);
        mpfr_init(r53518);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r53510, x, MPFR_RNDN);
        ;
        mpfr_pow(r53512, r53510, r53511, MPFR_RNDN);
        mpfr_mul(r53513, r53509, r53512, MPFR_RNDN);
        ;
        mpfr_add(r53515, r53513, r53514, MPFR_RNDN);
        ;
        mpfr_mul(r53517, r53516, r53510, MPFR_RNDN);
        mpfr_sub(r53518, r53515, r53517, MPFR_RNDN);
        return mpfr_get_d(r53518, MPFR_RNDN);
}

