#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 r53902 = x;
        float r53903 = y;
        float r53904 = r53902 * r53903;
        float r53905 = z;
        float r53906 = r53904 / r53905;
        return r53906;
}

double f_id(double x, double y, double z) {
        double r53907 = x;
        double r53908 = y;
        double r53909 = r53907 * r53908;
        double r53910 = z;
        double r53911 = r53909 / r53910;
        return r53911;
}


double f_of(float x, float y, float z) {
        float r53912 = x;
        float r53913 = y;
        float r53914 = r53912 * r53913;
        float r53915 = z;
        float r53916 = r53914 / r53915;
        float r53917 = -0.0;
        bool r53918 = r53916 <= r53917;
        float r53919 = r53915 / r53913;
        float r53920 = r53912 / r53919;
        float r53921 = 1;
        float r53922 = r53921 / r53915;
        float r53923 = r53914 * r53922;
        float r53924 = r53918 ? r53920 : r53923;
        return r53924;
}

double f_od(double x, double y, double z) {
        double r53925 = x;
        double r53926 = y;
        double r53927 = r53925 * r53926;
        double r53928 = z;
        double r53929 = r53927 / r53928;
        double r53930 = -0.0;
        bool r53931 = r53929 <= r53930;
        double r53932 = r53928 / r53926;
        double r53933 = r53925 / r53932;
        double r53934 = 1;
        double r53935 = r53934 / r53928;
        double r53936 = r53927 * r53935;
        double r53937 = r53931 ? r53933 : r53936;
        return r53937;
}

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 r53938, r53939, r53940, r53941, r53942;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53938);
        mpfr_init(r53939);
        mpfr_init(r53940);
        mpfr_init(r53941);
        mpfr_init(r53942);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53938, x, MPFR_RNDN);
        mpfr_set_d(r53939, y, MPFR_RNDN);
        mpfr_mul(r53940, r53938, r53939, MPFR_RNDN);
        mpfr_set_d(r53941, z, MPFR_RNDN);
        mpfr_div(r53942, r53940, r53941, MPFR_RNDN);
        return mpfr_get_d(r53942, MPFR_RNDN);
}

static mpfr_t r53943, r53944, r53945, r53946, r53947, r53948, r53949, r53950, r53951, r53952, r53953, r53954, r53955;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53943);
        mpfr_init(r53944);
        mpfr_init(r53945);
        mpfr_init(r53946);
        mpfr_init(r53947);
        mpfr_init_set_str(r53948, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53949);
        mpfr_init(r53950);
        mpfr_init(r53951);
        mpfr_init_set_str(r53952, "1", 10, MPFR_RNDN);
        mpfr_init(r53953);
        mpfr_init(r53954);
        mpfr_init(r53955);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53943, x, MPFR_RNDN);
        mpfr_set_d(r53944, y, MPFR_RNDN);
        mpfr_mul(r53945, r53943, r53944, MPFR_RNDN);
        mpfr_set_d(r53946, z, MPFR_RNDN);
        mpfr_div(r53947, r53945, r53946, MPFR_RNDN);
        ;
        mpfr_set_si(r53949, mpfr_cmp(r53947, r53948) <= 0, MPFR_RNDN);
        mpfr_div(r53950, r53946, r53944, MPFR_RNDN);
        mpfr_div(r53951, r53943, r53950, MPFR_RNDN);
        ;
        mpfr_div(r53953, r53952, r53946, MPFR_RNDN);
        mpfr_mul(r53954, r53945, r53953, MPFR_RNDN);
        if (mpfr_get_si(r53949, MPFR_RNDN)) { mpfr_set(r53955, r53951, MPFR_RNDN); } else { mpfr_set(r53955, r53954, MPFR_RNDN); };
        return mpfr_get_d(r53955, MPFR_RNDN);
}

static mpfr_t r53956, r53957, r53958, r53959, r53960, r53961, r53962, r53963, r53964, r53965, r53966, r53967, r53968;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53956);
        mpfr_init(r53957);
        mpfr_init(r53958);
        mpfr_init(r53959);
        mpfr_init(r53960);
        mpfr_init_set_str(r53961, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r53962);
        mpfr_init(r53963);
        mpfr_init(r53964);
        mpfr_init_set_str(r53965, "1", 10, MPFR_RNDN);
        mpfr_init(r53966);
        mpfr_init(r53967);
        mpfr_init(r53968);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53956, x, MPFR_RNDN);
        mpfr_set_d(r53957, y, MPFR_RNDN);
        mpfr_mul(r53958, r53956, r53957, MPFR_RNDN);
        mpfr_set_d(r53959, z, MPFR_RNDN);
        mpfr_div(r53960, r53958, r53959, MPFR_RNDN);
        ;
        mpfr_set_si(r53962, mpfr_cmp(r53960, r53961) <= 0, MPFR_RNDN);
        mpfr_div(r53963, r53959, r53957, MPFR_RNDN);
        mpfr_div(r53964, r53956, r53963, MPFR_RNDN);
        ;
        mpfr_div(r53966, r53965, r53959, MPFR_RNDN);
        mpfr_mul(r53967, r53958, r53966, MPFR_RNDN);
        if (mpfr_get_si(r53962, MPFR_RNDN)) { mpfr_set(r53968, r53964, MPFR_RNDN); } else { mpfr_set(r53968, r53967, MPFR_RNDN); };
        return mpfr_get_d(r53968, MPFR_RNDN);
}

