#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 r45982 = x;
        float r45983 = y;
        float r45984 = r45982 - r45983;
        float r45985 = fabs(r45984);
        float r45986 = fabs(r45983);
        float r45987 = r45985 / r45986;
        return r45987;
}

double f_id(double x, double y) {
        double r45988 = x;
        double r45989 = y;
        double r45990 = r45988 - r45989;
        double r45991 = fabs(r45990);
        double r45992 = fabs(r45989);
        double r45993 = r45991 / r45992;
        return r45993;
}


double f_of(float x, float y) {
        float r45994 = x;
        float r45995 = y;
        float r45996 = r45994 - r45995;
        float r45997 = fabs(r45996);
        float r45998 = fabs(r45995);
        float r45999 = r45997 / r45998;
        return r45999;
}

double f_od(double x, double y) {
        double r46000 = x;
        double r46001 = y;
        double r46002 = r46000 - r46001;
        double r46003 = fabs(r46002);
        double r46004 = fabs(r46001);
        double r46005 = r46003 / r46004;
        return r46005;
}

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 r46006, r46007, r46008, r46009, r46010, r46011;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r46006);
        mpfr_init(r46007);
        mpfr_init(r46008);
        mpfr_init(r46009);
        mpfr_init(r46010);
        mpfr_init(r46011);
}

double f_im(double x, double y) {
        mpfr_set_d(r46006, x, MPFR_RNDN);
        mpfr_set_d(r46007, y, MPFR_RNDN);
        mpfr_sub(r46008, r46006, r46007, MPFR_RNDN);
        mpfr_abs(r46009, r46008, MPFR_RNDN);
        mpfr_abs(r46010, r46007, MPFR_RNDN);
        mpfr_div(r46011, r46009, r46010, MPFR_RNDN);
        return mpfr_get_d(r46011, MPFR_RNDN);
}

static mpfr_t r46012, r46013, r46014, r46015, r46016, r46017;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46012);
        mpfr_init(r46013);
        mpfr_init(r46014);
        mpfr_init(r46015);
        mpfr_init(r46016);
        mpfr_init(r46017);
}

double f_fm(double x, double y) {
        mpfr_set_d(r46012, x, MPFR_RNDN);
        mpfr_set_d(r46013, y, MPFR_RNDN);
        mpfr_sub(r46014, r46012, r46013, MPFR_RNDN);
        mpfr_abs(r46015, r46014, MPFR_RNDN);
        mpfr_abs(r46016, r46013, MPFR_RNDN);
        mpfr_div(r46017, r46015, r46016, MPFR_RNDN);
        return mpfr_get_d(r46017, MPFR_RNDN);
}

static mpfr_t r46018, r46019, r46020, r46021, r46022, r46023;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r46018);
        mpfr_init(r46019);
        mpfr_init(r46020);
        mpfr_init(r46021);
        mpfr_init(r46022);
        mpfr_init(r46023);
}

double f_dm(double x, double y) {
        mpfr_set_d(r46018, x, MPFR_RNDN);
        mpfr_set_d(r46019, y, MPFR_RNDN);
        mpfr_sub(r46020, r46018, r46019, MPFR_RNDN);
        mpfr_abs(r46021, r46020, MPFR_RNDN);
        mpfr_abs(r46022, r46019, MPFR_RNDN);
        mpfr_div(r46023, r46021, r46022, MPFR_RNDN);
        return mpfr_get_d(r46023, MPFR_RNDN);
}

