#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 r56138 = x;
        float r56139 = y;
        float r56140 = z;
        float r56141 = r56139 - r56140;
        float r56142 = t;
        float r56143 = r56142 - r56138;
        float r56144 = r56141 * r56143;
        float r56145 = r56138 + r56144;
        return r56145;
}

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


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

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

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 r56170, r56171, r56172, r56173, r56174, r56175, r56176, r56177;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r56170);
        mpfr_init(r56171);
        mpfr_init(r56172);
        mpfr_init(r56173);
        mpfr_init(r56174);
        mpfr_init(r56175);
        mpfr_init(r56176);
        mpfr_init(r56177);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r56170, x, MPFR_RNDN);
        mpfr_set_d(r56171, y, MPFR_RNDN);
        mpfr_set_d(r56172, z, MPFR_RNDN);
        mpfr_sub(r56173, r56171, r56172, MPFR_RNDN);
        mpfr_set_d(r56174, t, MPFR_RNDN);
        mpfr_sub(r56175, r56174, r56170, MPFR_RNDN);
        mpfr_mul(r56176, r56173, r56175, MPFR_RNDN);
        mpfr_add(r56177, r56170, r56176, MPFR_RNDN);
        return mpfr_get_d(r56177, MPFR_RNDN);
}

static mpfr_t r56178, r56179, r56180, r56181, r56182, r56183, r56184, r56185;

void setup_mpfr_f_fm() {
        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_fm(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_dm() {
        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_dm(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);
}

