#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 r51394 = x;
        float r51395 = y;
        float r51396 = z;
        float r51397 = r51395 * r51396;
        float r51398 = r51394 - r51397;
        return r51398;
}

double f_id(double x, double y, double z) {
        double r51399 = x;
        double r51400 = y;
        double r51401 = z;
        double r51402 = r51400 * r51401;
        double r51403 = r51399 - r51402;
        return r51403;
}


double f_of(float x, float y, float z) {
        float r51404 = x;
        float r51405 = y;
        float r51406 = z;
        float r51407 = r51405 * r51406;
        float r51408 = r51404 - r51407;
        return r51408;
}

double f_od(double x, double y, double z) {
        double r51409 = x;
        double r51410 = y;
        double r51411 = z;
        double r51412 = r51410 * r51411;
        double r51413 = r51409 - r51412;
        return r51413;
}

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 r51414, r51415, r51416, r51417, r51418;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r51414);
        mpfr_init(r51415);
        mpfr_init(r51416);
        mpfr_init(r51417);
        mpfr_init(r51418);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r51414, x, MPFR_RNDN);
        mpfr_set_d(r51415, y, MPFR_RNDN);
        mpfr_set_d(r51416, z, MPFR_RNDN);
        mpfr_mul(r51417, r51415, r51416, MPFR_RNDN);
        mpfr_sub(r51418, r51414, r51417, MPFR_RNDN);
        return mpfr_get_d(r51418, MPFR_RNDN);
}

static mpfr_t r51419, r51420, r51421, r51422, r51423;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51419);
        mpfr_init(r51420);
        mpfr_init(r51421);
        mpfr_init(r51422);
        mpfr_init(r51423);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r51419, x, MPFR_RNDN);
        mpfr_set_d(r51420, y, MPFR_RNDN);
        mpfr_set_d(r51421, z, MPFR_RNDN);
        mpfr_mul(r51422, r51420, r51421, MPFR_RNDN);
        mpfr_sub(r51423, r51419, r51422, MPFR_RNDN);
        return mpfr_get_d(r51423, MPFR_RNDN);
}

static mpfr_t r51424, r51425, r51426, r51427, r51428;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r51424);
        mpfr_init(r51425);
        mpfr_init(r51426);
        mpfr_init(r51427);
        mpfr_init(r51428);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r51424, x, MPFR_RNDN);
        mpfr_set_d(r51425, y, MPFR_RNDN);
        mpfr_set_d(r51426, z, MPFR_RNDN);
        mpfr_mul(r51427, r51425, r51426, MPFR_RNDN);
        mpfr_sub(r51428, r51424, r51427, MPFR_RNDN);
        return mpfr_get_d(r51428, MPFR_RNDN);
}

