#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 r53099 = x;
        float r53100 = y;
        float r53101 = z;
        float r53102 = r53100 * r53101;
        float r53103 = r53099 - r53102;
        return r53103;
}

double f_id(double x, double y, double z) {
        double r53104 = x;
        double r53105 = y;
        double r53106 = z;
        double r53107 = r53105 * r53106;
        double r53108 = r53104 - r53107;
        return r53108;
}


double f_of(float x, float y, float z) {
        float r53109 = x;
        float r53110 = y;
        float r53111 = z;
        float r53112 = r53110 * r53111;
        float r53113 = r53109 - r53112;
        return r53113;
}

double f_od(double x, double y, double z) {
        double r53114 = x;
        double r53115 = y;
        double r53116 = z;
        double r53117 = r53115 * r53116;
        double r53118 = r53114 - r53117;
        return r53118;
}

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 r53119, r53120, r53121, r53122, r53123;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53119);
        mpfr_init(r53120);
        mpfr_init(r53121);
        mpfr_init(r53122);
        mpfr_init(r53123);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53119, x, MPFR_RNDN);
        mpfr_set_d(r53120, y, MPFR_RNDN);
        mpfr_set_d(r53121, z, MPFR_RNDN);
        mpfr_mul(r53122, r53120, r53121, MPFR_RNDN);
        mpfr_sub(r53123, r53119, r53122, MPFR_RNDN);
        return mpfr_get_d(r53123, MPFR_RNDN);
}

static mpfr_t r53124, r53125, r53126, r53127, r53128;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53124);
        mpfr_init(r53125);
        mpfr_init(r53126);
        mpfr_init(r53127);
        mpfr_init(r53128);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53124, x, MPFR_RNDN);
        mpfr_set_d(r53125, y, MPFR_RNDN);
        mpfr_set_d(r53126, z, MPFR_RNDN);
        mpfr_mul(r53127, r53125, r53126, MPFR_RNDN);
        mpfr_sub(r53128, r53124, r53127, MPFR_RNDN);
        return mpfr_get_d(r53128, MPFR_RNDN);
}

static mpfr_t r53129, r53130, r53131, r53132, r53133;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53129);
        mpfr_init(r53130);
        mpfr_init(r53131);
        mpfr_init(r53132);
        mpfr_init(r53133);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53129, x, MPFR_RNDN);
        mpfr_set_d(r53130, y, MPFR_RNDN);
        mpfr_set_d(r53131, z, MPFR_RNDN);
        mpfr_mul(r53132, r53130, r53131, MPFR_RNDN);
        mpfr_sub(r53133, r53129, r53132, MPFR_RNDN);
        return mpfr_get_d(r53133, MPFR_RNDN);
}

