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

char *name = "Numeric.Signal:interpolate   from hsignal-0.2.7.1";

double f_if(float x, float y, float z, float t, float a) {
        float r45174 = x;
        float r45175 = y;
        float r45176 = z;
        float r45177 = r45175 - r45176;
        float r45178 = t;
        float r45179 = r45178 - r45174;
        float r45180 = a;
        float r45181 = r45180 - r45176;
        float r45182 = r45179 / r45181;
        float r45183 = r45177 * r45182;
        float r45184 = r45174 + r45183;
        return r45184;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45185 = x;
        double r45186 = y;
        double r45187 = z;
        double r45188 = r45186 - r45187;
        double r45189 = t;
        double r45190 = r45189 - r45185;
        double r45191 = a;
        double r45192 = r45191 - r45187;
        double r45193 = r45190 / r45192;
        double r45194 = r45188 * r45193;
        double r45195 = r45185 + r45194;
        return r45195;
}


double f_of(float x, float y, float z, float t, float a) {
        float r45196 = x;
        float r45197 = y;
        float r45198 = z;
        float r45199 = r45197 - r45198;
        float r45200 = t;
        float r45201 = r45200 - r45196;
        float r45202 = a;
        float r45203 = r45202 - r45198;
        float r45204 = r45201 / r45203;
        float r45205 = r45199 * r45204;
        float r45206 = r45196 + r45205;
        float r45207 = -5.533219044932495e-192;
        bool r45208 = r45206 <= r45207;
        float r45209 = cbrt(r45203);
        float r45210 = r45209 * r45209;
        float r45211 = r45199 / r45210;
        float r45212 = r45201 / r45209;
        float r45213 = r45211 * r45212;
        float r45214 = r45196 + r45213;
        float r45215 = 2.4573043102845598e-307;
        bool r45216 = r45206 <= r45215;
        float r45217 = r45197 / r45198;
        float r45218 = r45201 * r45217;
        float r45219 = r45200 - r45218;
        float r45220 = r45216 ? r45219 : r45214;
        float r45221 = r45208 ? r45214 : r45220;
        return r45221;
}

double f_od(double x, double y, double z, double t, double a) {
        double r45222 = x;
        double r45223 = y;
        double r45224 = z;
        double r45225 = r45223 - r45224;
        double r45226 = t;
        double r45227 = r45226 - r45222;
        double r45228 = a;
        double r45229 = r45228 - r45224;
        double r45230 = r45227 / r45229;
        double r45231 = r45225 * r45230;
        double r45232 = r45222 + r45231;
        double r45233 = -5.533219044932495e-192;
        bool r45234 = r45232 <= r45233;
        double r45235 = cbrt(r45229);
        double r45236 = r45235 * r45235;
        double r45237 = r45225 / r45236;
        double r45238 = r45227 / r45235;
        double r45239 = r45237 * r45238;
        double r45240 = r45222 + r45239;
        double r45241 = 2.4573043102845598e-307;
        bool r45242 = r45232 <= r45241;
        double r45243 = r45223 / r45224;
        double r45244 = r45227 * r45243;
        double r45245 = r45226 - r45244;
        double r45246 = r45242 ? r45245 : r45240;
        double r45247 = r45234 ? r45240 : r45246;
        return r45247;
}

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 r45248, r45249, r45250, r45251, r45252, r45253, r45254, r45255, r45256, r45257, r45258;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45248);
        mpfr_init(r45249);
        mpfr_init(r45250);
        mpfr_init(r45251);
        mpfr_init(r45252);
        mpfr_init(r45253);
        mpfr_init(r45254);
        mpfr_init(r45255);
        mpfr_init(r45256);
        mpfr_init(r45257);
        mpfr_init(r45258);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45248, x, MPFR_RNDN);
        mpfr_set_d(r45249, y, MPFR_RNDN);
        mpfr_set_d(r45250, z, MPFR_RNDN);
        mpfr_sub(r45251, r45249, r45250, MPFR_RNDN);
        mpfr_set_d(r45252, t, MPFR_RNDN);
        mpfr_sub(r45253, r45252, r45248, MPFR_RNDN);
        mpfr_set_d(r45254, a, MPFR_RNDN);
        mpfr_sub(r45255, r45254, r45250, MPFR_RNDN);
        mpfr_div(r45256, r45253, r45255, MPFR_RNDN);
        mpfr_mul(r45257, r45251, r45256, MPFR_RNDN);
        mpfr_add(r45258, r45248, r45257, MPFR_RNDN);
        return mpfr_get_d(r45258, MPFR_RNDN);
}

static mpfr_t r45259, r45260, r45261, r45262, r45263, r45264, r45265, r45266, r45267, r45268, r45269, r45270, r45271, r45272, r45273, r45274, r45275, r45276, r45277, r45278, r45279, r45280, r45281, r45282, r45283, r45284;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45259);
        mpfr_init(r45260);
        mpfr_init(r45261);
        mpfr_init(r45262);
        mpfr_init(r45263);
        mpfr_init(r45264);
        mpfr_init(r45265);
        mpfr_init(r45266);
        mpfr_init(r45267);
        mpfr_init(r45268);
        mpfr_init(r45269);
        mpfr_init_set_str(r45270, "-5.533219044932495e-192", 10, MPFR_RNDN);
        mpfr_init(r45271);
        mpfr_init(r45272);
        mpfr_init(r45273);
        mpfr_init(r45274);
        mpfr_init(r45275);
        mpfr_init(r45276);
        mpfr_init(r45277);
        mpfr_init_set_str(r45278, "2.4573043102845598e-307", 10, MPFR_RNDN);
        mpfr_init(r45279);
        mpfr_init(r45280);
        mpfr_init(r45281);
        mpfr_init(r45282);
        mpfr_init(r45283);
        mpfr_init(r45284);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45259, x, MPFR_RNDN);
        mpfr_set_d(r45260, y, MPFR_RNDN);
        mpfr_set_d(r45261, z, MPFR_RNDN);
        mpfr_sub(r45262, r45260, r45261, MPFR_RNDN);
        mpfr_set_d(r45263, t, MPFR_RNDN);
        mpfr_sub(r45264, r45263, r45259, MPFR_RNDN);
        mpfr_set_d(r45265, a, MPFR_RNDN);
        mpfr_sub(r45266, r45265, r45261, MPFR_RNDN);
        mpfr_div(r45267, r45264, r45266, MPFR_RNDN);
        mpfr_mul(r45268, r45262, r45267, MPFR_RNDN);
        mpfr_add(r45269, r45259, r45268, MPFR_RNDN);
        ;
        mpfr_set_si(r45271, mpfr_cmp(r45269, r45270) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45272, r45266, MPFR_RNDN);
        mpfr_mul(r45273, r45272, r45272, MPFR_RNDN);
        mpfr_div(r45274, r45262, r45273, MPFR_RNDN);
        mpfr_div(r45275, r45264, r45272, MPFR_RNDN);
        mpfr_mul(r45276, r45274, r45275, MPFR_RNDN);
        mpfr_add(r45277, r45259, r45276, MPFR_RNDN);
        ;
        mpfr_set_si(r45279, mpfr_cmp(r45269, r45278) <= 0, MPFR_RNDN);
        mpfr_div(r45280, r45260, r45261, MPFR_RNDN);
        mpfr_mul(r45281, r45264, r45280, MPFR_RNDN);
        mpfr_sub(r45282, r45263, r45281, MPFR_RNDN);
        if (mpfr_get_si(r45279, MPFR_RNDN)) { mpfr_set(r45283, r45282, MPFR_RNDN); } else { mpfr_set(r45283, r45277, MPFR_RNDN); };
        if (mpfr_get_si(r45271, MPFR_RNDN)) { mpfr_set(r45284, r45277, MPFR_RNDN); } else { mpfr_set(r45284, r45283, MPFR_RNDN); };
        return mpfr_get_d(r45284, MPFR_RNDN);
}

static mpfr_t r45285, r45286, r45287, r45288, r45289, r45290, r45291, r45292, r45293, r45294, r45295, r45296, r45297, r45298, r45299, r45300, r45301, r45302, r45303, r45304, r45305, r45306, r45307, r45308, r45309, r45310;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45285);
        mpfr_init(r45286);
        mpfr_init(r45287);
        mpfr_init(r45288);
        mpfr_init(r45289);
        mpfr_init(r45290);
        mpfr_init(r45291);
        mpfr_init(r45292);
        mpfr_init(r45293);
        mpfr_init(r45294);
        mpfr_init(r45295);
        mpfr_init_set_str(r45296, "-5.533219044932495e-192", 10, MPFR_RNDN);
        mpfr_init(r45297);
        mpfr_init(r45298);
        mpfr_init(r45299);
        mpfr_init(r45300);
        mpfr_init(r45301);
        mpfr_init(r45302);
        mpfr_init(r45303);
        mpfr_init_set_str(r45304, "2.4573043102845598e-307", 10, MPFR_RNDN);
        mpfr_init(r45305);
        mpfr_init(r45306);
        mpfr_init(r45307);
        mpfr_init(r45308);
        mpfr_init(r45309);
        mpfr_init(r45310);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45285, x, MPFR_RNDN);
        mpfr_set_d(r45286, y, MPFR_RNDN);
        mpfr_set_d(r45287, z, MPFR_RNDN);
        mpfr_sub(r45288, r45286, r45287, MPFR_RNDN);
        mpfr_set_d(r45289, t, MPFR_RNDN);
        mpfr_sub(r45290, r45289, r45285, MPFR_RNDN);
        mpfr_set_d(r45291, a, MPFR_RNDN);
        mpfr_sub(r45292, r45291, r45287, MPFR_RNDN);
        mpfr_div(r45293, r45290, r45292, MPFR_RNDN);
        mpfr_mul(r45294, r45288, r45293, MPFR_RNDN);
        mpfr_add(r45295, r45285, r45294, MPFR_RNDN);
        ;
        mpfr_set_si(r45297, mpfr_cmp(r45295, r45296) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45298, r45292, MPFR_RNDN);
        mpfr_mul(r45299, r45298, r45298, MPFR_RNDN);
        mpfr_div(r45300, r45288, r45299, MPFR_RNDN);
        mpfr_div(r45301, r45290, r45298, MPFR_RNDN);
        mpfr_mul(r45302, r45300, r45301, MPFR_RNDN);
        mpfr_add(r45303, r45285, r45302, MPFR_RNDN);
        ;
        mpfr_set_si(r45305, mpfr_cmp(r45295, r45304) <= 0, MPFR_RNDN);
        mpfr_div(r45306, r45286, r45287, MPFR_RNDN);
        mpfr_mul(r45307, r45290, r45306, MPFR_RNDN);
        mpfr_sub(r45308, r45289, r45307, MPFR_RNDN);
        if (mpfr_get_si(r45305, MPFR_RNDN)) { mpfr_set(r45309, r45308, MPFR_RNDN); } else { mpfr_set(r45309, r45303, MPFR_RNDN); };
        if (mpfr_get_si(r45297, MPFR_RNDN)) { mpfr_set(r45310, r45303, MPFR_RNDN); } else { mpfr_set(r45310, r45309, MPFR_RNDN); };
        return mpfr_get_d(r45310, MPFR_RNDN);
}

