#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 r45691 = x;
        float r45692 = y;
        float r45693 = z;
        float r45694 = r45692 - r45693;
        float r45695 = t;
        float r45696 = r45695 - r45691;
        float r45697 = a;
        float r45698 = r45697 - r45693;
        float r45699 = r45696 / r45698;
        float r45700 = r45694 * r45699;
        float r45701 = r45691 + r45700;
        return r45701;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45702 = x;
        double r45703 = y;
        double r45704 = z;
        double r45705 = r45703 - r45704;
        double r45706 = t;
        double r45707 = r45706 - r45702;
        double r45708 = a;
        double r45709 = r45708 - r45704;
        double r45710 = r45707 / r45709;
        double r45711 = r45705 * r45710;
        double r45712 = r45702 + r45711;
        return r45712;
}


double f_of(float x, float y, float z, float t, float a) {
        float r45713 = x;
        float r45714 = y;
        float r45715 = z;
        float r45716 = r45714 - r45715;
        float r45717 = t;
        float r45718 = r45717 - r45713;
        float r45719 = a;
        float r45720 = r45719 - r45715;
        float r45721 = r45718 / r45720;
        float r45722 = r45716 * r45721;
        float r45723 = r45713 + r45722;
        float r45724 = -5.533219044932495e-192;
        bool r45725 = r45723 <= r45724;
        float r45726 = cbrt(r45720);
        float r45727 = r45726 * r45726;
        float r45728 = r45716 / r45727;
        float r45729 = r45718 / r45726;
        float r45730 = r45728 * r45729;
        float r45731 = r45713 + r45730;
        float r45732 = 2.4573043102845598e-307;
        bool r45733 = r45723 <= r45732;
        float r45734 = r45714 / r45715;
        float r45735 = r45718 * r45734;
        float r45736 = r45717 - r45735;
        float r45737 = r45733 ? r45736 : r45731;
        float r45738 = r45725 ? r45731 : r45737;
        return r45738;
}

double f_od(double x, double y, double z, double t, double a) {
        double r45739 = x;
        double r45740 = y;
        double r45741 = z;
        double r45742 = r45740 - r45741;
        double r45743 = t;
        double r45744 = r45743 - r45739;
        double r45745 = a;
        double r45746 = r45745 - r45741;
        double r45747 = r45744 / r45746;
        double r45748 = r45742 * r45747;
        double r45749 = r45739 + r45748;
        double r45750 = -5.533219044932495e-192;
        bool r45751 = r45749 <= r45750;
        double r45752 = cbrt(r45746);
        double r45753 = r45752 * r45752;
        double r45754 = r45742 / r45753;
        double r45755 = r45744 / r45752;
        double r45756 = r45754 * r45755;
        double r45757 = r45739 + r45756;
        double r45758 = 2.4573043102845598e-307;
        bool r45759 = r45749 <= r45758;
        double r45760 = r45740 / r45741;
        double r45761 = r45744 * r45760;
        double r45762 = r45743 - r45761;
        double r45763 = r45759 ? r45762 : r45757;
        double r45764 = r45751 ? r45757 : r45763;
        return r45764;
}

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 r45765, r45766, r45767, r45768, r45769, r45770, r45771, r45772, r45773, r45774, r45775;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45765);
        mpfr_init(r45766);
        mpfr_init(r45767);
        mpfr_init(r45768);
        mpfr_init(r45769);
        mpfr_init(r45770);
        mpfr_init(r45771);
        mpfr_init(r45772);
        mpfr_init(r45773);
        mpfr_init(r45774);
        mpfr_init(r45775);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45765, x, MPFR_RNDN);
        mpfr_set_d(r45766, y, MPFR_RNDN);
        mpfr_set_d(r45767, z, MPFR_RNDN);
        mpfr_sub(r45768, r45766, r45767, MPFR_RNDN);
        mpfr_set_d(r45769, t, MPFR_RNDN);
        mpfr_sub(r45770, r45769, r45765, MPFR_RNDN);
        mpfr_set_d(r45771, a, MPFR_RNDN);
        mpfr_sub(r45772, r45771, r45767, MPFR_RNDN);
        mpfr_div(r45773, r45770, r45772, MPFR_RNDN);
        mpfr_mul(r45774, r45768, r45773, MPFR_RNDN);
        mpfr_add(r45775, r45765, r45774, MPFR_RNDN);
        return mpfr_get_d(r45775, MPFR_RNDN);
}

static mpfr_t r45776, r45777, r45778, r45779, r45780, r45781, r45782, r45783, r45784, r45785, r45786, r45787, r45788, r45789, r45790, r45791, r45792, r45793, r45794, r45795, r45796, r45797, r45798, r45799, r45800, r45801;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45776);
        mpfr_init(r45777);
        mpfr_init(r45778);
        mpfr_init(r45779);
        mpfr_init(r45780);
        mpfr_init(r45781);
        mpfr_init(r45782);
        mpfr_init(r45783);
        mpfr_init(r45784);
        mpfr_init(r45785);
        mpfr_init(r45786);
        mpfr_init_set_str(r45787, "-5.533219044932495e-192", 10, MPFR_RNDN);
        mpfr_init(r45788);
        mpfr_init(r45789);
        mpfr_init(r45790);
        mpfr_init(r45791);
        mpfr_init(r45792);
        mpfr_init(r45793);
        mpfr_init(r45794);
        mpfr_init_set_str(r45795, "2.4573043102845598e-307", 10, MPFR_RNDN);
        mpfr_init(r45796);
        mpfr_init(r45797);
        mpfr_init(r45798);
        mpfr_init(r45799);
        mpfr_init(r45800);
        mpfr_init(r45801);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45776, x, MPFR_RNDN);
        mpfr_set_d(r45777, y, MPFR_RNDN);
        mpfr_set_d(r45778, z, MPFR_RNDN);
        mpfr_sub(r45779, r45777, r45778, MPFR_RNDN);
        mpfr_set_d(r45780, t, MPFR_RNDN);
        mpfr_sub(r45781, r45780, r45776, MPFR_RNDN);
        mpfr_set_d(r45782, a, MPFR_RNDN);
        mpfr_sub(r45783, r45782, r45778, MPFR_RNDN);
        mpfr_div(r45784, r45781, r45783, MPFR_RNDN);
        mpfr_mul(r45785, r45779, r45784, MPFR_RNDN);
        mpfr_add(r45786, r45776, r45785, MPFR_RNDN);
        ;
        mpfr_set_si(r45788, mpfr_cmp(r45786, r45787) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45789, r45783, MPFR_RNDN);
        mpfr_mul(r45790, r45789, r45789, MPFR_RNDN);
        mpfr_div(r45791, r45779, r45790, MPFR_RNDN);
        mpfr_div(r45792, r45781, r45789, MPFR_RNDN);
        mpfr_mul(r45793, r45791, r45792, MPFR_RNDN);
        mpfr_add(r45794, r45776, r45793, MPFR_RNDN);
        ;
        mpfr_set_si(r45796, mpfr_cmp(r45786, r45795) <= 0, MPFR_RNDN);
        mpfr_div(r45797, r45777, r45778, MPFR_RNDN);
        mpfr_mul(r45798, r45781, r45797, MPFR_RNDN);
        mpfr_sub(r45799, r45780, r45798, MPFR_RNDN);
        if (mpfr_get_si(r45796, MPFR_RNDN)) { mpfr_set(r45800, r45799, MPFR_RNDN); } else { mpfr_set(r45800, r45794, MPFR_RNDN); };
        if (mpfr_get_si(r45788, MPFR_RNDN)) { mpfr_set(r45801, r45794, MPFR_RNDN); } else { mpfr_set(r45801, r45800, MPFR_RNDN); };
        return mpfr_get_d(r45801, MPFR_RNDN);
}

static mpfr_t r45802, r45803, r45804, r45805, r45806, r45807, r45808, r45809, r45810, r45811, r45812, r45813, r45814, r45815, r45816, r45817, r45818, r45819, r45820, r45821, r45822, r45823, r45824, r45825, r45826, r45827;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45802);
        mpfr_init(r45803);
        mpfr_init(r45804);
        mpfr_init(r45805);
        mpfr_init(r45806);
        mpfr_init(r45807);
        mpfr_init(r45808);
        mpfr_init(r45809);
        mpfr_init(r45810);
        mpfr_init(r45811);
        mpfr_init(r45812);
        mpfr_init_set_str(r45813, "-5.533219044932495e-192", 10, MPFR_RNDN);
        mpfr_init(r45814);
        mpfr_init(r45815);
        mpfr_init(r45816);
        mpfr_init(r45817);
        mpfr_init(r45818);
        mpfr_init(r45819);
        mpfr_init(r45820);
        mpfr_init_set_str(r45821, "2.4573043102845598e-307", 10, MPFR_RNDN);
        mpfr_init(r45822);
        mpfr_init(r45823);
        mpfr_init(r45824);
        mpfr_init(r45825);
        mpfr_init(r45826);
        mpfr_init(r45827);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45802, x, MPFR_RNDN);
        mpfr_set_d(r45803, y, MPFR_RNDN);
        mpfr_set_d(r45804, z, MPFR_RNDN);
        mpfr_sub(r45805, r45803, r45804, MPFR_RNDN);
        mpfr_set_d(r45806, t, MPFR_RNDN);
        mpfr_sub(r45807, r45806, r45802, MPFR_RNDN);
        mpfr_set_d(r45808, a, MPFR_RNDN);
        mpfr_sub(r45809, r45808, r45804, MPFR_RNDN);
        mpfr_div(r45810, r45807, r45809, MPFR_RNDN);
        mpfr_mul(r45811, r45805, r45810, MPFR_RNDN);
        mpfr_add(r45812, r45802, r45811, MPFR_RNDN);
        ;
        mpfr_set_si(r45814, mpfr_cmp(r45812, r45813) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45815, r45809, MPFR_RNDN);
        mpfr_mul(r45816, r45815, r45815, MPFR_RNDN);
        mpfr_div(r45817, r45805, r45816, MPFR_RNDN);
        mpfr_div(r45818, r45807, r45815, MPFR_RNDN);
        mpfr_mul(r45819, r45817, r45818, MPFR_RNDN);
        mpfr_add(r45820, r45802, r45819, MPFR_RNDN);
        ;
        mpfr_set_si(r45822, mpfr_cmp(r45812, r45821) <= 0, MPFR_RNDN);
        mpfr_div(r45823, r45803, r45804, MPFR_RNDN);
        mpfr_mul(r45824, r45807, r45823, MPFR_RNDN);
        mpfr_sub(r45825, r45806, r45824, MPFR_RNDN);
        if (mpfr_get_si(r45822, MPFR_RNDN)) { mpfr_set(r45826, r45825, MPFR_RNDN); } else { mpfr_set(r45826, r45820, MPFR_RNDN); };
        if (mpfr_get_si(r45814, MPFR_RNDN)) { mpfr_set(r45827, r45820, MPFR_RNDN); } else { mpfr_set(r45827, r45826, MPFR_RNDN); };
        return mpfr_get_d(r45827, MPFR_RNDN);
}

