#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 r53714 = x;
        float r53715 = y;
        float r53716 = r53714 * r53715;
        float r53717 = z;
        float r53718 = r53716 / r53717;
        return r53718;
}

double f_id(double x, double y, double z) {
        double r53719 = x;
        double r53720 = y;
        double r53721 = r53719 * r53720;
        double r53722 = z;
        double r53723 = r53721 / r53722;
        return r53723;
}


double f_of(float x, float y, float z) {
        float r53724 = x;
        float r53725 = y;
        float r53726 = r53724 * r53725;
        float r53727 = z;
        float r53728 = r53726 / r53727;
        float r53729 = -0.0;
        bool r53730 = r53728 <= r53729;
        float r53731 = r53727 / r53725;
        float r53732 = r53724 / r53731;
        float r53733 = 1;
        float r53734 = r53733 / r53727;
        float r53735 = r53726 * r53734;
        float r53736 = r53730 ? r53732 : r53735;
        return r53736;
}

double f_od(double x, double y, double z) {
        double r53737 = x;
        double r53738 = y;
        double r53739 = r53737 * r53738;
        double r53740 = z;
        double r53741 = r53739 / r53740;
        double r53742 = -0.0;
        bool r53743 = r53741 <= r53742;
        double r53744 = r53740 / r53738;
        double r53745 = r53737 / r53744;
        double r53746 = 1;
        double r53747 = r53746 / r53740;
        double r53748 = r53739 * r53747;
        double r53749 = r53743 ? r53745 : r53748;
        return r53749;
}

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 r53750, r53751, r53752, r53753, r53754;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53750);
        mpfr_init(r53751);
        mpfr_init(r53752);
        mpfr_init(r53753);
        mpfr_init(r53754);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53750, x, MPFR_RNDN);
        mpfr_set_d(r53751, y, MPFR_RNDN);
        mpfr_mul(r53752, r53750, r53751, MPFR_RNDN);
        mpfr_set_d(r53753, z, MPFR_RNDN);
        mpfr_div(r53754, r53752, r53753, MPFR_RNDN);
        return mpfr_get_d(r53754, MPFR_RNDN);
}

static mpfr_t r53755, r53756, r53757, r53758, r53759, r53760, r53761, r53762, r53763, r53764, r53765, r53766, r53767;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53755);
        mpfr_init(r53756);
        mpfr_init(r53757);
        mpfr_init(r53758);
        mpfr_init(r53759);
        mpfr_init_set_str(r53760, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53761);
        mpfr_init(r53762);
        mpfr_init(r53763);
        mpfr_init_set_str(r53764, "1", 10, MPFR_RNDN);
        mpfr_init(r53765);
        mpfr_init(r53766);
        mpfr_init(r53767);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53755, x, MPFR_RNDN);
        mpfr_set_d(r53756, y, MPFR_RNDN);
        mpfr_mul(r53757, r53755, r53756, MPFR_RNDN);
        mpfr_set_d(r53758, z, MPFR_RNDN);
        mpfr_div(r53759, r53757, r53758, MPFR_RNDN);
        ;
        mpfr_set_si(r53761, mpfr_cmp(r53759, r53760) <= 0, MPFR_RNDN);
        mpfr_div(r53762, r53758, r53756, MPFR_RNDN);
        mpfr_div(r53763, r53755, r53762, MPFR_RNDN);
        ;
        mpfr_div(r53765, r53764, r53758, MPFR_RNDN);
        mpfr_mul(r53766, r53757, r53765, MPFR_RNDN);
        if (mpfr_get_si(r53761, MPFR_RNDN)) { mpfr_set(r53767, r53763, MPFR_RNDN); } else { mpfr_set(r53767, r53766, MPFR_RNDN); };
        return mpfr_get_d(r53767, MPFR_RNDN);
}

static mpfr_t r53768, r53769, r53770, r53771, r53772, r53773, r53774, r53775, r53776, r53777, r53778, r53779, r53780;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53768);
        mpfr_init(r53769);
        mpfr_init(r53770);
        mpfr_init(r53771);
        mpfr_init(r53772);
        mpfr_init_set_str(r53773, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53774);
        mpfr_init(r53775);
        mpfr_init(r53776);
        mpfr_init_set_str(r53777, "1", 10, MPFR_RNDN);
        mpfr_init(r53778);
        mpfr_init(r53779);
        mpfr_init(r53780);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53768, x, MPFR_RNDN);
        mpfr_set_d(r53769, y, MPFR_RNDN);
        mpfr_mul(r53770, r53768, r53769, MPFR_RNDN);
        mpfr_set_d(r53771, z, MPFR_RNDN);
        mpfr_div(r53772, r53770, r53771, MPFR_RNDN);
        ;
        mpfr_set_si(r53774, mpfr_cmp(r53772, r53773) <= 0, MPFR_RNDN);
        mpfr_div(r53775, r53771, r53769, MPFR_RNDN);
        mpfr_div(r53776, r53768, r53775, MPFR_RNDN);
        ;
        mpfr_div(r53778, r53777, r53771, MPFR_RNDN);
        mpfr_mul(r53779, r53770, r53778, MPFR_RNDN);
        if (mpfr_get_si(r53774, MPFR_RNDN)) { mpfr_set(r53780, r53776, MPFR_RNDN); } else { mpfr_set(r53780, r53779, MPFR_RNDN); };
        return mpfr_get_d(r53780, MPFR_RNDN);
}

