#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 r51761 = x;
        float r51762 = y;
        float r51763 = r51761 * r51762;
        float r51764 = z;
        float r51765 = r51763 / r51764;
        return r51765;
}

double f_id(double x, double y, double z) {
        double r51766 = x;
        double r51767 = y;
        double r51768 = r51766 * r51767;
        double r51769 = z;
        double r51770 = r51768 / r51769;
        return r51770;
}


double f_of(float x, float y, float z) {
        float r51771 = z;
        float r51772 = 2.1434644401519457e-300f;
        bool r51773 = r51771 <= r51772;
        float r51774 = x;
        float r51775 = y;
        float r51776 = r51774 * r51775;
        float r51777 = r51776 / r51771;
        float r51778 = 8.719617136183342e-188f;
        bool r51779 = r51771 <= r51778;
        float r51780 = r51771 / r51775;
        float r51781 = r51774 / r51780;
        float r51782 = 2.2547275136738512e-175f;
        bool r51783 = r51771 <= r51782;
        float r51784 = r51783 ? r51777 : r51781;
        float r51785 = r51779 ? r51781 : r51784;
        float r51786 = r51773 ? r51777 : r51785;
        return r51786;
}

double f_od(double x, double y, double z) {
        double r51787 = z;
        double r51788 = 2.1434644401519457e-300;
        bool r51789 = r51787 <= r51788;
        double r51790 = x;
        double r51791 = y;
        double r51792 = r51790 * r51791;
        double r51793 = r51792 / r51787;
        double r51794 = 8.719617136183342e-188;
        bool r51795 = r51787 <= r51794;
        double r51796 = r51787 / r51791;
        double r51797 = r51790 / r51796;
        double r51798 = 2.2547275136738512e-175;
        bool r51799 = r51787 <= r51798;
        double r51800 = r51799 ? r51793 : r51797;
        double r51801 = r51795 ? r51797 : r51800;
        double r51802 = r51789 ? r51793 : r51801;
        return r51802;
}

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 r51803, r51804, r51805, r51806, r51807;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r51803);
        mpfr_init(r51804);
        mpfr_init(r51805);
        mpfr_init(r51806);
        mpfr_init(r51807);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r51803, x, MPFR_RNDN);
        mpfr_set_d(r51804, y, MPFR_RNDN);
        mpfr_mul(r51805, r51803, r51804, MPFR_RNDN);
        mpfr_set_d(r51806, z, MPFR_RNDN);
        mpfr_div(r51807, r51805, r51806, MPFR_RNDN);
        return mpfr_get_d(r51807, MPFR_RNDN);
}

static mpfr_t r51808, r51809, r51810, r51811, r51812, r51813, r51814, r51815, r51816, r51817, r51818, r51819, r51820, r51821, r51822, r51823;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51808);
        mpfr_init_set_str(r51809, "2.1434644401519457e-300", 10, MPFR_RNDN);
        mpfr_init(r51810);
        mpfr_init(r51811);
        mpfr_init(r51812);
        mpfr_init(r51813);
        mpfr_init(r51814);
        mpfr_init_set_str(r51815, "8.719617136183342e-188", 10, MPFR_RNDN);
        mpfr_init(r51816);
        mpfr_init(r51817);
        mpfr_init(r51818);
        mpfr_init_set_str(r51819, "2.2547275136738512e-175", 10, MPFR_RNDN);
        mpfr_init(r51820);
        mpfr_init(r51821);
        mpfr_init(r51822);
        mpfr_init(r51823);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r51808, z, MPFR_RNDN);
        ;
        mpfr_set_si(r51810, mpfr_cmp(r51808, r51809) <= 0, MPFR_RNDN);
        mpfr_set_d(r51811, x, MPFR_RNDN);
        mpfr_set_d(r51812, y, MPFR_RNDN);
        mpfr_mul(r51813, r51811, r51812, MPFR_RNDN);
        mpfr_div(r51814, r51813, r51808, MPFR_RNDN);
        ;
        mpfr_set_si(r51816, mpfr_cmp(r51808, r51815) <= 0, MPFR_RNDN);
        mpfr_div(r51817, r51808, r51812, MPFR_RNDN);
        mpfr_div(r51818, r51811, r51817, MPFR_RNDN);
        ;
        mpfr_set_si(r51820, mpfr_cmp(r51808, r51819) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r51820, MPFR_RNDN)) { mpfr_set(r51821, r51814, MPFR_RNDN); } else { mpfr_set(r51821, r51818, MPFR_RNDN); };
        if (mpfr_get_si(r51816, MPFR_RNDN)) { mpfr_set(r51822, r51818, MPFR_RNDN); } else { mpfr_set(r51822, r51821, MPFR_RNDN); };
        if (mpfr_get_si(r51810, MPFR_RNDN)) { mpfr_set(r51823, r51814, MPFR_RNDN); } else { mpfr_set(r51823, r51822, MPFR_RNDN); };
        return mpfr_get_d(r51823, MPFR_RNDN);
}

static mpfr_t r51824, r51825, r51826, r51827, r51828, r51829, r51830, r51831, r51832, r51833, r51834, r51835, r51836, r51837, r51838, r51839;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51824);
        mpfr_init_set_str(r51825, "2.1434644401519457e-300", 10, MPFR_RNDN);
        mpfr_init(r51826);
        mpfr_init(r51827);
        mpfr_init(r51828);
        mpfr_init(r51829);
        mpfr_init(r51830);
        mpfr_init_set_str(r51831, "8.719617136183342e-188", 10, MPFR_RNDN);
        mpfr_init(r51832);
        mpfr_init(r51833);
        mpfr_init(r51834);
        mpfr_init_set_str(r51835, "2.2547275136738512e-175", 10, MPFR_RNDN);
        mpfr_init(r51836);
        mpfr_init(r51837);
        mpfr_init(r51838);
        mpfr_init(r51839);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r51824, z, MPFR_RNDN);
        ;
        mpfr_set_si(r51826, mpfr_cmp(r51824, r51825) <= 0, MPFR_RNDN);
        mpfr_set_d(r51827, x, MPFR_RNDN);
        mpfr_set_d(r51828, y, MPFR_RNDN);
        mpfr_mul(r51829, r51827, r51828, MPFR_RNDN);
        mpfr_div(r51830, r51829, r51824, MPFR_RNDN);
        ;
        mpfr_set_si(r51832, mpfr_cmp(r51824, r51831) <= 0, MPFR_RNDN);
        mpfr_div(r51833, r51824, r51828, MPFR_RNDN);
        mpfr_div(r51834, r51827, r51833, MPFR_RNDN);
        ;
        mpfr_set_si(r51836, mpfr_cmp(r51824, r51835) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r51836, MPFR_RNDN)) { mpfr_set(r51837, r51830, MPFR_RNDN); } else { mpfr_set(r51837, r51834, MPFR_RNDN); };
        if (mpfr_get_si(r51832, MPFR_RNDN)) { mpfr_set(r51838, r51834, MPFR_RNDN); } else { mpfr_set(r51838, r51837, MPFR_RNDN); };
        if (mpfr_get_si(r51826, MPFR_RNDN)) { mpfr_set(r51839, r51830, MPFR_RNDN); } else { mpfr_set(r51839, r51838, MPFR_RNDN); };
        return mpfr_get_d(r51839, MPFR_RNDN);
}

