#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 r53482 = x;
        float r53483 = y;
        float r53484 = r53482 * r53483;
        float r53485 = z;
        float r53486 = r53484 / r53485;
        return r53486;
}

double f_id(double x, double y, double z) {
        double r53487 = x;
        double r53488 = y;
        double r53489 = r53487 * r53488;
        double r53490 = z;
        double r53491 = r53489 / r53490;
        return r53491;
}


double f_of(float x, float y, float z) {
        float r53492 = x;
        float r53493 = y;
        float r53494 = r53492 * r53493;
        float r53495 = z;
        float r53496 = r53494 / r53495;
        float r53497 = -0.0;
        bool r53498 = r53496 <= r53497;
        float r53499 = r53495 / r53493;
        float r53500 = r53492 / r53499;
        float r53501 = 1;
        float r53502 = r53501 / r53495;
        float r53503 = r53494 * r53502;
        float r53504 = r53498 ? r53500 : r53503;
        return r53504;
}

double f_od(double x, double y, double z) {
        double r53505 = x;
        double r53506 = y;
        double r53507 = r53505 * r53506;
        double r53508 = z;
        double r53509 = r53507 / r53508;
        double r53510 = -0.0;
        bool r53511 = r53509 <= r53510;
        double r53512 = r53508 / r53506;
        double r53513 = r53505 / r53512;
        double r53514 = 1;
        double r53515 = r53514 / r53508;
        double r53516 = r53507 * r53515;
        double r53517 = r53511 ? r53513 : r53516;
        return r53517;
}

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 r53518, r53519, r53520, r53521, r53522;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53518);
        mpfr_init(r53519);
        mpfr_init(r53520);
        mpfr_init(r53521);
        mpfr_init(r53522);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53518, x, MPFR_RNDN);
        mpfr_set_d(r53519, y, MPFR_RNDN);
        mpfr_mul(r53520, r53518, r53519, MPFR_RNDN);
        mpfr_set_d(r53521, z, MPFR_RNDN);
        mpfr_div(r53522, r53520, r53521, MPFR_RNDN);
        return mpfr_get_d(r53522, MPFR_RNDN);
}

static mpfr_t r53523, r53524, r53525, r53526, r53527, r53528, r53529, r53530, r53531, r53532, r53533, r53534, r53535;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53523);
        mpfr_init(r53524);
        mpfr_init(r53525);
        mpfr_init(r53526);
        mpfr_init(r53527);
        mpfr_init_set_str(r53528, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53529);
        mpfr_init(r53530);
        mpfr_init(r53531);
        mpfr_init_set_str(r53532, "1", 10, MPFR_RNDN);
        mpfr_init(r53533);
        mpfr_init(r53534);
        mpfr_init(r53535);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53523, x, MPFR_RNDN);
        mpfr_set_d(r53524, y, MPFR_RNDN);
        mpfr_mul(r53525, r53523, r53524, MPFR_RNDN);
        mpfr_set_d(r53526, z, MPFR_RNDN);
        mpfr_div(r53527, r53525, r53526, MPFR_RNDN);
        ;
        mpfr_set_si(r53529, mpfr_cmp(r53527, r53528) <= 0, MPFR_RNDN);
        mpfr_div(r53530, r53526, r53524, MPFR_RNDN);
        mpfr_div(r53531, r53523, r53530, MPFR_RNDN);
        ;
        mpfr_div(r53533, r53532, r53526, MPFR_RNDN);
        mpfr_mul(r53534, r53525, r53533, MPFR_RNDN);
        if (mpfr_get_si(r53529, MPFR_RNDN)) { mpfr_set(r53535, r53531, MPFR_RNDN); } else { mpfr_set(r53535, r53534, MPFR_RNDN); };
        return mpfr_get_d(r53535, MPFR_RNDN);
}

static mpfr_t r53536, r53537, r53538, r53539, r53540, r53541, r53542, r53543, r53544, r53545, r53546, r53547, r53548;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53536);
        mpfr_init(r53537);
        mpfr_init(r53538);
        mpfr_init(r53539);
        mpfr_init(r53540);
        mpfr_init_set_str(r53541, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53542);
        mpfr_init(r53543);
        mpfr_init(r53544);
        mpfr_init_set_str(r53545, "1", 10, MPFR_RNDN);
        mpfr_init(r53546);
        mpfr_init(r53547);
        mpfr_init(r53548);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53536, x, MPFR_RNDN);
        mpfr_set_d(r53537, y, MPFR_RNDN);
        mpfr_mul(r53538, r53536, r53537, MPFR_RNDN);
        mpfr_set_d(r53539, z, MPFR_RNDN);
        mpfr_div(r53540, r53538, r53539, MPFR_RNDN);
        ;
        mpfr_set_si(r53542, mpfr_cmp(r53540, r53541) <= 0, MPFR_RNDN);
        mpfr_div(r53543, r53539, r53537, MPFR_RNDN);
        mpfr_div(r53544, r53536, r53543, MPFR_RNDN);
        ;
        mpfr_div(r53546, r53545, r53539, MPFR_RNDN);
        mpfr_mul(r53547, r53538, r53546, MPFR_RNDN);
        if (mpfr_get_si(r53542, MPFR_RNDN)) { mpfr_set(r53548, r53544, MPFR_RNDN); } else { mpfr_set(r53548, r53547, MPFR_RNDN); };
        return mpfr_get_d(r53548, MPFR_RNDN);
}

