#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 r53359 = x;
        float r53360 = y;
        float r53361 = z;
        float r53362 = r53360 * r53361;
        float r53363 = r53359 - r53362;
        return r53363;
}

double f_id(double x, double y, double z) {
        double r53364 = x;
        double r53365 = y;
        double r53366 = z;
        double r53367 = r53365 * r53366;
        double r53368 = r53364 - r53367;
        return r53368;
}


double f_of(float x, float y, float z) {
        float r53369 = x;
        float r53370 = y;
        float r53371 = z;
        float r53372 = r53370 * r53371;
        float r53373 = r53369 - r53372;
        return r53373;
}

double f_od(double x, double y, double z) {
        double r53374 = x;
        double r53375 = y;
        double r53376 = z;
        double r53377 = r53375 * r53376;
        double r53378 = r53374 - r53377;
        return r53378;
}

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 r53379, r53380, r53381, r53382, r53383;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r53379);
        mpfr_init(r53380);
        mpfr_init(r53381);
        mpfr_init(r53382);
        mpfr_init(r53383);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r53379, x, MPFR_RNDN);
        mpfr_set_d(r53380, y, MPFR_RNDN);
        mpfr_set_d(r53381, z, MPFR_RNDN);
        mpfr_mul(r53382, r53380, r53381, MPFR_RNDN);
        mpfr_sub(r53383, r53379, r53382, MPFR_RNDN);
        return mpfr_get_d(r53383, MPFR_RNDN);
}

static mpfr_t r53384, r53385, r53386, r53387, r53388;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53384);
        mpfr_init(r53385);
        mpfr_init(r53386);
        mpfr_init(r53387);
        mpfr_init(r53388);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r53384, x, MPFR_RNDN);
        mpfr_set_d(r53385, y, MPFR_RNDN);
        mpfr_set_d(r53386, z, MPFR_RNDN);
        mpfr_mul(r53387, r53385, r53386, MPFR_RNDN);
        mpfr_sub(r53388, r53384, r53387, MPFR_RNDN);
        return mpfr_get_d(r53388, MPFR_RNDN);
}

static mpfr_t r53389, r53390, r53391, r53392, r53393;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r53389);
        mpfr_init(r53390);
        mpfr_init(r53391);
        mpfr_init(r53392);
        mpfr_init(r53393);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r53389, x, MPFR_RNDN);
        mpfr_set_d(r53390, y, MPFR_RNDN);
        mpfr_set_d(r53391, z, MPFR_RNDN);
        mpfr_mul(r53392, r53390, r53391, MPFR_RNDN);
        mpfr_sub(r53393, r53389, r53392, MPFR_RNDN);
        return mpfr_get_d(r53393, MPFR_RNDN);
}

