#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 r53029 = 3.0;
        float r53030 = x;
        float r53031 = r53030 * r53029;
        float r53032 = r53031 * r53030;
        float r53033 = 4.0;
        float r53034 = r53030 * r53033;
        float r53035 = r53032 - r53034;
        float r53036 = 1.0;
        float r53037 = r53035 + r53036;
        float r53038 = r53029 * r53037;
        return r53038;
}

double f_id(double x) {
        double r53039 = 3.0;
        double r53040 = x;
        double r53041 = r53040 * r53039;
        double r53042 = r53041 * r53040;
        double r53043 = 4.0;
        double r53044 = r53040 * r53043;
        double r53045 = r53042 - r53044;
        double r53046 = 1.0;
        double r53047 = r53045 + r53046;
        double r53048 = r53039 * r53047;
        return r53048;
}


double f_of(float x) {
        float r53049 = 9.0;
        float r53050 = x;
        float r53051 = 2;
        float r53052 = pow(r53050, r53051);
        float r53053 = r53049 * r53052;
        float r53054 = 3.0;
        float r53055 = r53053 + r53054;
        float r53056 = 12.0;
        float r53057 = r53056 * r53050;
        float r53058 = r53055 - r53057;
        return r53058;
}

double f_od(double x) {
        double r53059 = 9.0;
        double r53060 = x;
        double r53061 = 2;
        double r53062 = pow(r53060, r53061);
        double r53063 = r53059 * r53062;
        double r53064 = 3.0;
        double r53065 = r53063 + r53064;
        double r53066 = 12.0;
        double r53067 = r53066 * r53060;
        double r53068 = r53065 - r53067;
        return r53068;
}

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 r53069, r53070, r53071, r53072, r53073, r53074, r53075, r53076, r53077, r53078;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53069, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53070);
        mpfr_init(r53071);
        mpfr_init(r53072);
        mpfr_init_set_str(r53073, "4.0", 10, MPFR_RNDN);
        mpfr_init(r53074);
        mpfr_init(r53075);
        mpfr_init_set_str(r53076, "1.0", 10, MPFR_RNDN);
        mpfr_init(r53077);
        mpfr_init(r53078);
}

double f_im(double x) {
        ;
        mpfr_set_d(r53070, x, MPFR_RNDN);
        mpfr_mul(r53071, r53070, r53069, MPFR_RNDN);
        mpfr_mul(r53072, r53071, r53070, MPFR_RNDN);
        ;
        mpfr_mul(r53074, r53070, r53073, MPFR_RNDN);
        mpfr_sub(r53075, r53072, r53074, MPFR_RNDN);
        ;
        mpfr_add(r53077, r53075, r53076, MPFR_RNDN);
        mpfr_mul(r53078, r53069, r53077, MPFR_RNDN);
        return mpfr_get_d(r53078, MPFR_RNDN);
}

static mpfr_t r53079, r53080, r53081, r53082, r53083, r53084, r53085, r53086, r53087, r53088;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53079, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53080);
        mpfr_init_set_str(r53081, "2", 10, MPFR_RNDN);
        mpfr_init(r53082);
        mpfr_init(r53083);
        mpfr_init_set_str(r53084, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53085);
        mpfr_init_set_str(r53086, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53087);
        mpfr_init(r53088);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r53080, x, MPFR_RNDN);
        ;
        mpfr_pow(r53082, r53080, r53081, MPFR_RNDN);
        mpfr_mul(r53083, r53079, r53082, MPFR_RNDN);
        ;
        mpfr_add(r53085, r53083, r53084, MPFR_RNDN);
        ;
        mpfr_mul(r53087, r53086, r53080, MPFR_RNDN);
        mpfr_sub(r53088, r53085, r53087, MPFR_RNDN);
        return mpfr_get_d(r53088, MPFR_RNDN);
}

static mpfr_t r53089, r53090, r53091, r53092, r53093, r53094, r53095, r53096, r53097, r53098;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init_set_str(r53089, "9.0", 10, MPFR_RNDN);
        mpfr_init(r53090);
        mpfr_init_set_str(r53091, "2", 10, MPFR_RNDN);
        mpfr_init(r53092);
        mpfr_init(r53093);
        mpfr_init_set_str(r53094, "3.0", 10, MPFR_RNDN);
        mpfr_init(r53095);
        mpfr_init_set_str(r53096, "12.0", 10, MPFR_RNDN);
        mpfr_init(r53097);
        mpfr_init(r53098);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r53090, x, MPFR_RNDN);
        ;
        mpfr_pow(r53092, r53090, r53091, MPFR_RNDN);
        mpfr_mul(r53093, r53089, r53092, MPFR_RNDN);
        ;
        mpfr_add(r53095, r53093, r53094, MPFR_RNDN);
        ;
        mpfr_mul(r53097, r53096, r53090, MPFR_RNDN);
        mpfr_sub(r53098, r53095, r53097, MPFR_RNDN);
        return mpfr_get_d(r53098, MPFR_RNDN);
}

