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

char *name = "Data.Metrics.Snapshot:quantile from metrics-0.3.0.2";

double f_if(float x, float y, float z, float t) {
        float r56146 = x;
        float r56147 = y;
        float r56148 = z;
        float r56149 = r56147 - r56148;
        float r56150 = t;
        float r56151 = r56150 - r56146;
        float r56152 = r56149 * r56151;
        float r56153 = r56146 + r56152;
        return r56153;
}

double f_id(double x, double y, double z, double t) {
        double r56154 = x;
        double r56155 = y;
        double r56156 = z;
        double r56157 = r56155 - r56156;
        double r56158 = t;
        double r56159 = r56158 - r56154;
        double r56160 = r56157 * r56159;
        double r56161 = r56154 + r56160;
        return r56161;
}


double f_of(float x, float y, float z, float t) {
        float r56162 = x;
        float r56163 = y;
        float r56164 = z;
        float r56165 = r56163 - r56164;
        float r56166 = t;
        float r56167 = r56166 - r56162;
        float r56168 = r56165 * r56167;
        float r56169 = r56162 + r56168;
        return r56169;
}

double f_od(double x, double y, double z, double t) {
        double r56170 = x;
        double r56171 = y;
        double r56172 = z;
        double r56173 = r56171 - r56172;
        double r56174 = t;
        double r56175 = r56174 - r56170;
        double r56176 = r56173 * r56175;
        double r56177 = r56170 + r56176;
        return r56177;
}

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 r56178, r56179, r56180, r56181, r56182, r56183, r56184, r56185;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56178);
        mpfr_init(r56179);
        mpfr_init(r56180);
        mpfr_init(r56181);
        mpfr_init(r56182);
        mpfr_init(r56183);
        mpfr_init(r56184);
        mpfr_init(r56185);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r56178, x, MPFR_RNDN);
        mpfr_set_d(r56179, y, MPFR_RNDN);
        mpfr_set_d(r56180, z, MPFR_RNDN);
        mpfr_sub(r56181, r56179, r56180, MPFR_RNDN);
        mpfr_set_d(r56182, t, MPFR_RNDN);
        mpfr_sub(r56183, r56182, r56178, MPFR_RNDN);
        mpfr_mul(r56184, r56181, r56183, MPFR_RNDN);
        mpfr_add(r56185, r56178, r56184, MPFR_RNDN);
        return mpfr_get_d(r56185, MPFR_RNDN);
}

static mpfr_t r56186, r56187, r56188, r56189, r56190, r56191, r56192, r56193;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56186);
        mpfr_init(r56187);
        mpfr_init(r56188);
        mpfr_init(r56189);
        mpfr_init(r56190);
        mpfr_init(r56191);
        mpfr_init(r56192);
        mpfr_init(r56193);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r56186, x, MPFR_RNDN);
        mpfr_set_d(r56187, y, MPFR_RNDN);
        mpfr_set_d(r56188, z, MPFR_RNDN);
        mpfr_sub(r56189, r56187, r56188, MPFR_RNDN);
        mpfr_set_d(r56190, t, MPFR_RNDN);
        mpfr_sub(r56191, r56190, r56186, MPFR_RNDN);
        mpfr_mul(r56192, r56189, r56191, MPFR_RNDN);
        mpfr_add(r56193, r56186, r56192, MPFR_RNDN);
        return mpfr_get_d(r56193, MPFR_RNDN);
}

static mpfr_t r56194, r56195, r56196, r56197, r56198, r56199, r56200, r56201;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r56194);
        mpfr_init(r56195);
        mpfr_init(r56196);
        mpfr_init(r56197);
        mpfr_init(r56198);
        mpfr_init(r56199);
        mpfr_init(r56200);
        mpfr_init(r56201);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r56194, x, MPFR_RNDN);
        mpfr_set_d(r56195, y, MPFR_RNDN);
        mpfr_set_d(r56196, z, MPFR_RNDN);
        mpfr_sub(r56197, r56195, r56196, MPFR_RNDN);
        mpfr_set_d(r56198, t, MPFR_RNDN);
        mpfr_sub(r56199, r56198, r56194, MPFR_RNDN);
        mpfr_mul(r56200, r56197, r56199, MPFR_RNDN);
        mpfr_add(r56201, r56194, r56200, MPFR_RNDN);
        return mpfr_get_d(r56201, MPFR_RNDN);
}

