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

char *name = "Numeric.LinearAlgebra.Util:formatSparse from hmatrix-0.16.1.5";

double f_if(float x, float y) {
        float r45728 = x;
        float r45729 = y;
        float r45730 = r45728 - r45729;
        float r45731 = fabs(r45730);
        float r45732 = fabs(r45729);
        float r45733 = r45731 / r45732;
        return r45733;
}

double f_id(double x, double y) {
        double r45734 = x;
        double r45735 = y;
        double r45736 = r45734 - r45735;
        double r45737 = fabs(r45736);
        double r45738 = fabs(r45735);
        double r45739 = r45737 / r45738;
        return r45739;
}


double f_of(float x, float y) {
        float r45740 = x;
        float r45741 = y;
        float r45742 = r45740 - r45741;
        float r45743 = fabs(r45742);
        float r45744 = fabs(r45741);
        float r45745 = r45743 / r45744;
        return r45745;
}

double f_od(double x, double y) {
        double r45746 = x;
        double r45747 = y;
        double r45748 = r45746 - r45747;
        double r45749 = fabs(r45748);
        double r45750 = fabs(r45747);
        double r45751 = r45749 / r45750;
        return r45751;
}

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 r45752, r45753, r45754, r45755, r45756, r45757;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45752);
        mpfr_init(r45753);
        mpfr_init(r45754);
        mpfr_init(r45755);
        mpfr_init(r45756);
        mpfr_init(r45757);
}

double f_im(double x, double y) {
        mpfr_set_d(r45752, x, MPFR_RNDN);
        mpfr_set_d(r45753, y, MPFR_RNDN);
        mpfr_sub(r45754, r45752, r45753, MPFR_RNDN);
        mpfr_abs(r45755, r45754, MPFR_RNDN);
        mpfr_abs(r45756, r45753, MPFR_RNDN);
        mpfr_div(r45757, r45755, r45756, MPFR_RNDN);
        return mpfr_get_d(r45757, MPFR_RNDN);
}

static mpfr_t r45758, r45759, r45760, r45761, r45762, r45763;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45758);
        mpfr_init(r45759);
        mpfr_init(r45760);
        mpfr_init(r45761);
        mpfr_init(r45762);
        mpfr_init(r45763);
}

double f_fm(double x, double y) {
        mpfr_set_d(r45758, x, MPFR_RNDN);
        mpfr_set_d(r45759, y, MPFR_RNDN);
        mpfr_sub(r45760, r45758, r45759, MPFR_RNDN);
        mpfr_abs(r45761, r45760, MPFR_RNDN);
        mpfr_abs(r45762, r45759, MPFR_RNDN);
        mpfr_div(r45763, r45761, r45762, MPFR_RNDN);
        return mpfr_get_d(r45763, MPFR_RNDN);
}

static mpfr_t r45764, r45765, r45766, r45767, r45768, r45769;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45764);
        mpfr_init(r45765);
        mpfr_init(r45766);
        mpfr_init(r45767);
        mpfr_init(r45768);
        mpfr_init(r45769);
}

double f_dm(double x, double y) {
        mpfr_set_d(r45764, x, MPFR_RNDN);
        mpfr_set_d(r45765, y, MPFR_RNDN);
        mpfr_sub(r45766, r45764, r45765, MPFR_RNDN);
        mpfr_abs(r45767, r45766, MPFR_RNDN);
        mpfr_abs(r45768, r45765, MPFR_RNDN);
        mpfr_div(r45769, r45767, r45768, MPFR_RNDN);
        return mpfr_get_d(r45769, MPFR_RNDN);
}

