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

char *name = "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, A";

double f_if(float x, float y, float z) {
        float r53512 = x;
        float r53513 = y;
        float r53514 = r53512 * r53513;
        float r53515 = z;
        float r53516 = r53514 / r53515;
        return r53516;
}

double f_id(double x, double y, double z) {
        double r53517 = x;
        double r53518 = y;
        double r53519 = r53517 * r53518;
        double r53520 = z;
        double r53521 = r53519 / r53520;
        return r53521;
}


double f_of(float x, float y, float z) {
        float r53522 = x;
        float r53523 = y;
        float r53524 = r53522 * r53523;
        float r53525 = z;
        float r53526 = r53524 / r53525;
        float r53527 = -0.0;
        bool r53528 = r53526 <= r53527;
        float r53529 = r53525 / r53523;
        float r53530 = r53522 / r53529;
        float r53531 = 1;
        float r53532 = r53531 / r53525;
        float r53533 = r53524 * r53532;
        float r53534 = r53528 ? r53530 : r53533;
        return r53534;
}

double f_od(double x, double y, double z) {
        double r53535 = x;
        double r53536 = y;
        double r53537 = r53535 * r53536;
        double r53538 = z;
        double r53539 = r53537 / r53538;
        double r53540 = -0.0;
        bool r53541 = r53539 <= r53540;
        double r53542 = r53538 / r53536;
        double r53543 = r53535 / r53542;
        double r53544 = 1;
        double r53545 = r53544 / r53538;
        double r53546 = r53537 * r53545;
        double r53547 = r53541 ? r53543 : r53546;
        return r53547;
}

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 r53548, r53549, r53550, r53551, r53552;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53548);
        mpfr_init(r53549);
        mpfr_init(r53550);
        mpfr_init(r53551);
        mpfr_init(r53552);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53548, x, MPFR_RNDN);
        mpfr_set_d(r53549, y, MPFR_RNDN);
        mpfr_mul(r53550, r53548, r53549, MPFR_RNDN);
        mpfr_set_d(r53551, z, MPFR_RNDN);
        mpfr_div(r53552, r53550, r53551, MPFR_RNDN);
        return mpfr_get_d(r53552, MPFR_RNDN);
}

static mpfr_t r53553, r53554, r53555, r53556, r53557, r53558, r53559, r53560, r53561, r53562, r53563, r53564, r53565;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53553);
        mpfr_init(r53554);
        mpfr_init(r53555);
        mpfr_init(r53556);
        mpfr_init(r53557);
        mpfr_init_set_str(r53558, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53559);
        mpfr_init(r53560);
        mpfr_init(r53561);
        mpfr_init_set_str(r53562, "1", 10, MPFR_RNDN);
        mpfr_init(r53563);
        mpfr_init(r53564);
        mpfr_init(r53565);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53553, x, MPFR_RNDN);
        mpfr_set_d(r53554, y, MPFR_RNDN);
        mpfr_mul(r53555, r53553, r53554, MPFR_RNDN);
        mpfr_set_d(r53556, z, MPFR_RNDN);
        mpfr_div(r53557, r53555, r53556, MPFR_RNDN);
        ;
        mpfr_set_si(r53559, mpfr_cmp(r53557, r53558) <= 0, MPFR_RNDN);
        mpfr_div(r53560, r53556, r53554, MPFR_RNDN);
        mpfr_div(r53561, r53553, r53560, MPFR_RNDN);
        ;
        mpfr_div(r53563, r53562, r53556, MPFR_RNDN);
        mpfr_mul(r53564, r53555, r53563, MPFR_RNDN);
        if (mpfr_get_si(r53559, MPFR_RNDN)) { mpfr_set(r53565, r53561, MPFR_RNDN); } else { mpfr_set(r53565, r53564, MPFR_RNDN); };
        return mpfr_get_d(r53565, MPFR_RNDN);
}

static mpfr_t r53566, r53567, r53568, r53569, r53570, r53571, r53572, r53573, r53574, r53575, r53576, r53577, r53578;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53566);
        mpfr_init(r53567);
        mpfr_init(r53568);
        mpfr_init(r53569);
        mpfr_init(r53570);
        mpfr_init_set_str(r53571, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53572);
        mpfr_init(r53573);
        mpfr_init(r53574);
        mpfr_init_set_str(r53575, "1", 10, MPFR_RNDN);
        mpfr_init(r53576);
        mpfr_init(r53577);
        mpfr_init(r53578);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53566, x, MPFR_RNDN);
        mpfr_set_d(r53567, y, MPFR_RNDN);
        mpfr_mul(r53568, r53566, r53567, MPFR_RNDN);
        mpfr_set_d(r53569, z, MPFR_RNDN);
        mpfr_div(r53570, r53568, r53569, MPFR_RNDN);
        ;
        mpfr_set_si(r53572, mpfr_cmp(r53570, r53571) <= 0, MPFR_RNDN);
        mpfr_div(r53573, r53569, r53567, MPFR_RNDN);
        mpfr_div(r53574, r53566, r53573, MPFR_RNDN);
        ;
        mpfr_div(r53576, r53575, r53569, MPFR_RNDN);
        mpfr_mul(r53577, r53568, r53576, MPFR_RNDN);
        if (mpfr_get_si(r53572, MPFR_RNDN)) { mpfr_set(r53578, r53574, MPFR_RNDN); } else { mpfr_set(r53578, r53577, MPFR_RNDN); };
        return mpfr_get_d(r53578, MPFR_RNDN);
}

