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

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

double f_if(float x, float y, float z, float t) {
        float r53045 = x;
        float r53046 = y;
        float r53047 = z;
        float r53048 = t;
        float r53049 = r53047 * r53048;
        float r53050 = r53046 - r53049;
        float r53051 = r53045 / r53050;
        return r53051;
}

double f_id(double x, double y, double z, double t) {
        double r53052 = x;
        double r53053 = y;
        double r53054 = z;
        double r53055 = t;
        double r53056 = r53054 * r53055;
        double r53057 = r53053 - r53056;
        double r53058 = r53052 / r53057;
        return r53058;
}


double f_of(float x, float y, float z, float t) {
        float r53059 = x;
        float r53060 = y;
        float r53061 = z;
        float r53062 = t;
        float r53063 = r53061 * r53062;
        float r53064 = r53060 - r53063;
        float r53065 = r53059 / r53064;
        return r53065;
}

double f_od(double x, double y, double z, double t) {
        double r53066 = x;
        double r53067 = y;
        double r53068 = z;
        double r53069 = t;
        double r53070 = r53068 * r53069;
        double r53071 = r53067 - r53070;
        double r53072 = r53066 / r53071;
        return r53072;
}

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 r53073, r53074, r53075, r53076, r53077, r53078, r53079;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53073);
        mpfr_init(r53074);
        mpfr_init(r53075);
        mpfr_init(r53076);
        mpfr_init(r53077);
        mpfr_init(r53078);
        mpfr_init(r53079);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r53073, x, MPFR_RNDN);
        mpfr_set_d(r53074, y, MPFR_RNDN);
        mpfr_set_d(r53075, z, MPFR_RNDN);
        mpfr_set_d(r53076, t, MPFR_RNDN);
        mpfr_mul(r53077, r53075, r53076, MPFR_RNDN);
        mpfr_sub(r53078, r53074, r53077, MPFR_RNDN);
        mpfr_div(r53079, r53073, r53078, MPFR_RNDN);
        return mpfr_get_d(r53079, MPFR_RNDN);
}

static mpfr_t r53080, r53081, r53082, r53083, r53084, r53085, r53086;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53080);
        mpfr_init(r53081);
        mpfr_init(r53082);
        mpfr_init(r53083);
        mpfr_init(r53084);
        mpfr_init(r53085);
        mpfr_init(r53086);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r53080, x, MPFR_RNDN);
        mpfr_set_d(r53081, y, MPFR_RNDN);
        mpfr_set_d(r53082, z, MPFR_RNDN);
        mpfr_set_d(r53083, t, MPFR_RNDN);
        mpfr_mul(r53084, r53082, r53083, MPFR_RNDN);
        mpfr_sub(r53085, r53081, r53084, MPFR_RNDN);
        mpfr_div(r53086, r53080, r53085, MPFR_RNDN);
        return mpfr_get_d(r53086, MPFR_RNDN);
}

static mpfr_t r53087, r53088, r53089, r53090, r53091, r53092, r53093;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53087);
        mpfr_init(r53088);
        mpfr_init(r53089);
        mpfr_init(r53090);
        mpfr_init(r53091);
        mpfr_init(r53092);
        mpfr_init(r53093);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r53087, x, MPFR_RNDN);
        mpfr_set_d(r53088, y, MPFR_RNDN);
        mpfr_set_d(r53089, z, MPFR_RNDN);
        mpfr_set_d(r53090, t, MPFR_RNDN);
        mpfr_mul(r53091, r53089, r53090, MPFR_RNDN);
        mpfr_sub(r53092, r53088, r53091, MPFR_RNDN);
        mpfr_div(r53093, r53087, r53092, MPFR_RNDN);
        return mpfr_get_d(r53093, MPFR_RNDN);
}

