#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, C";

double f_if(float x, float y, float z) {
        float r53331 = x;
        float r53332 = y;
        float r53333 = z;
        float r53334 = r53332 * r53333;
        float r53335 = r53331 - r53334;
        return r53335;
}

double f_id(double x, double y, double z) {
        double r53336 = x;
        double r53337 = y;
        double r53338 = z;
        double r53339 = r53337 * r53338;
        double r53340 = r53336 - r53339;
        return r53340;
}


double f_of(float x, float y, float z) {
        float r53341 = x;
        float r53342 = y;
        float r53343 = z;
        float r53344 = r53342 * r53343;
        float r53345 = r53341 - r53344;
        return r53345;
}

double f_od(double x, double y, double z) {
        double r53346 = x;
        double r53347 = y;
        double r53348 = z;
        double r53349 = r53347 * r53348;
        double r53350 = r53346 - r53349;
        return r53350;
}

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 r53351, r53352, r53353, r53354, r53355;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53351);
        mpfr_init(r53352);
        mpfr_init(r53353);
        mpfr_init(r53354);
        mpfr_init(r53355);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53351, x, MPFR_RNDN);
        mpfr_set_d(r53352, y, MPFR_RNDN);
        mpfr_set_d(r53353, z, MPFR_RNDN);
        mpfr_mul(r53354, r53352, r53353, MPFR_RNDN);
        mpfr_sub(r53355, r53351, r53354, MPFR_RNDN);
        return mpfr_get_d(r53355, MPFR_RNDN);
}

static mpfr_t r53356, r53357, r53358, r53359, r53360;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53356);
        mpfr_init(r53357);
        mpfr_init(r53358);
        mpfr_init(r53359);
        mpfr_init(r53360);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53356, x, MPFR_RNDN);
        mpfr_set_d(r53357, y, MPFR_RNDN);
        mpfr_set_d(r53358, z, MPFR_RNDN);
        mpfr_mul(r53359, r53357, r53358, MPFR_RNDN);
        mpfr_sub(r53360, r53356, r53359, MPFR_RNDN);
        return mpfr_get_d(r53360, MPFR_RNDN);
}

static mpfr_t r53361, r53362, r53363, r53364, r53365;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53361);
        mpfr_init(r53362);
        mpfr_init(r53363);
        mpfr_init(r53364);
        mpfr_init(r53365);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53361, x, MPFR_RNDN);
        mpfr_set_d(r53362, y, MPFR_RNDN);
        mpfr_set_d(r53363, z, MPFR_RNDN);
        mpfr_mul(r53364, r53362, r53363, MPFR_RNDN);
        mpfr_sub(r53365, r53361, r53364, MPFR_RNDN);
        return mpfr_get_d(r53365, MPFR_RNDN);
}

