#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 r45676 = x;
        float r45677 = y;
        float r45678 = z;
        float r45679 = r45677 - r45678;
        float r45680 = t;
        float r45681 = r45680 - r45676;
        float r45682 = a;
        float r45683 = r45682 - r45678;
        float r45684 = r45681 / r45683;
        float r45685 = r45679 * r45684;
        float r45686 = r45676 + r45685;
        return r45686;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45687 = x;
        double r45688 = y;
        double r45689 = z;
        double r45690 = r45688 - r45689;
        double r45691 = t;
        double r45692 = r45691 - r45687;
        double r45693 = a;
        double r45694 = r45693 - r45689;
        double r45695 = r45692 / r45694;
        double r45696 = r45690 * r45695;
        double r45697 = r45687 + r45696;
        return r45697;
}


double f_of(float x, float y, float z, float t, float a) {
        float r45698 = x;
        float r45699 = y;
        float r45700 = z;
        float r45701 = r45699 - r45700;
        float r45702 = t;
        float r45703 = r45702 - r45698;
        float r45704 = a;
        float r45705 = r45704 - r45700;
        float r45706 = r45703 / r45705;
        float r45707 = r45701 * r45706;
        float r45708 = r45698 + r45707;
        float r45709 = -5.533219044932495e-192;
        bool r45710 = r45708 <= r45709;
        float r45711 = cbrt(r45705);
        float r45712 = r45711 * r45711;
        float r45713 = r45701 / r45712;
        float r45714 = r45703 / r45711;
        float r45715 = r45713 * r45714;
        float r45716 = r45698 + r45715;
        float r45717 = 2.4573043102845598e-307;
        bool r45718 = r45708 <= r45717;
        float r45719 = r45699 / r45700;
        float r45720 = r45703 * r45719;
        float r45721 = r45702 - r45720;
        float r45722 = r45718 ? r45721 : r45716;
        float r45723 = r45710 ? r45716 : r45722;
        return r45723;
}

double f_od(double x, double y, double z, double t, double a) {
        double r45724 = x;
        double r45725 = y;
        double r45726 = z;
        double r45727 = r45725 - r45726;
        double r45728 = t;
        double r45729 = r45728 - r45724;
        double r45730 = a;
        double r45731 = r45730 - r45726;
        double r45732 = r45729 / r45731;
        double r45733 = r45727 * r45732;
        double r45734 = r45724 + r45733;
        double r45735 = -5.533219044932495e-192;
        bool r45736 = r45734 <= r45735;
        double r45737 = cbrt(r45731);
        double r45738 = r45737 * r45737;
        double r45739 = r45727 / r45738;
        double r45740 = r45729 / r45737;
        double r45741 = r45739 * r45740;
        double r45742 = r45724 + r45741;
        double r45743 = 2.4573043102845598e-307;
        bool r45744 = r45734 <= r45743;
        double r45745 = r45725 / r45726;
        double r45746 = r45729 * r45745;
        double r45747 = r45728 - r45746;
        double r45748 = r45744 ? r45747 : r45742;
        double r45749 = r45736 ? r45742 : r45748;
        return r45749;
}

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 r45750, r45751, r45752, r45753, r45754, r45755, r45756, r45757, r45758, r45759, r45760;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45750);
        mpfr_init(r45751);
        mpfr_init(r45752);
        mpfr_init(r45753);
        mpfr_init(r45754);
        mpfr_init(r45755);
        mpfr_init(r45756);
        mpfr_init(r45757);
        mpfr_init(r45758);
        mpfr_init(r45759);
        mpfr_init(r45760);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45750, x, MPFR_RNDN);
        mpfr_set_d(r45751, y, MPFR_RNDN);
        mpfr_set_d(r45752, z, MPFR_RNDN);
        mpfr_sub(r45753, r45751, r45752, MPFR_RNDN);
        mpfr_set_d(r45754, t, MPFR_RNDN);
        mpfr_sub(r45755, r45754, r45750, MPFR_RNDN);
        mpfr_set_d(r45756, a, MPFR_RNDN);
        mpfr_sub(r45757, r45756, r45752, MPFR_RNDN);
        mpfr_div(r45758, r45755, r45757, MPFR_RNDN);
        mpfr_mul(r45759, r45753, r45758, MPFR_RNDN);
        mpfr_add(r45760, r45750, r45759, MPFR_RNDN);
        return mpfr_get_d(r45760, MPFR_RNDN);
}

static mpfr_t r45761, r45762, r45763, r45764, r45765, r45766, r45767, r45768, r45769, r45770, r45771, r45772, r45773, r45774, r45775, r45776, r45777, r45778, r45779, r45780, r45781, r45782, r45783, r45784, r45785, r45786;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45761);
        mpfr_init(r45762);
        mpfr_init(r45763);
        mpfr_init(r45764);
        mpfr_init(r45765);
        mpfr_init(r45766);
        mpfr_init(r45767);
        mpfr_init(r45768);
        mpfr_init(r45769);
        mpfr_init(r45770);
        mpfr_init(r45771);
        mpfr_init_set_str(r45772, "-5.533219044932495e-192", 10, MPFR_RNDN);
        mpfr_init(r45773);
        mpfr_init(r45774);
        mpfr_init(r45775);
        mpfr_init(r45776);
        mpfr_init(r45777);
        mpfr_init(r45778);
        mpfr_init(r45779);
        mpfr_init_set_str(r45780, "2.4573043102845598e-307", 10, MPFR_RNDN);
        mpfr_init(r45781);
        mpfr_init(r45782);
        mpfr_init(r45783);
        mpfr_init(r45784);
        mpfr_init(r45785);
        mpfr_init(r45786);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45761, x, MPFR_RNDN);
        mpfr_set_d(r45762, y, MPFR_RNDN);
        mpfr_set_d(r45763, z, MPFR_RNDN);
        mpfr_sub(r45764, r45762, r45763, MPFR_RNDN);
        mpfr_set_d(r45765, t, MPFR_RNDN);
        mpfr_sub(r45766, r45765, r45761, MPFR_RNDN);
        mpfr_set_d(r45767, a, MPFR_RNDN);
        mpfr_sub(r45768, r45767, r45763, MPFR_RNDN);
        mpfr_div(r45769, r45766, r45768, MPFR_RNDN);
        mpfr_mul(r45770, r45764, r45769, MPFR_RNDN);
        mpfr_add(r45771, r45761, r45770, MPFR_RNDN);
        ;
        mpfr_set_si(r45773, mpfr_cmp(r45771, r45772) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45774, r45768, MPFR_RNDN);
        mpfr_mul(r45775, r45774, r45774, MPFR_RNDN);
        mpfr_div(r45776, r45764, r45775, MPFR_RNDN);
        mpfr_div(r45777, r45766, r45774, MPFR_RNDN);
        mpfr_mul(r45778, r45776, r45777, MPFR_RNDN);
        mpfr_add(r45779, r45761, r45778, MPFR_RNDN);
        ;
        mpfr_set_si(r45781, mpfr_cmp(r45771, r45780) <= 0, MPFR_RNDN);
        mpfr_div(r45782, r45762, r45763, MPFR_RNDN);
        mpfr_mul(r45783, r45766, r45782, MPFR_RNDN);
        mpfr_sub(r45784, r45765, r45783, MPFR_RNDN);
        if (mpfr_get_si(r45781, MPFR_RNDN)) { mpfr_set(r45785, r45784, MPFR_RNDN); } else { mpfr_set(r45785, r45779, MPFR_RNDN); };
        if (mpfr_get_si(r45773, MPFR_RNDN)) { mpfr_set(r45786, r45779, MPFR_RNDN); } else { mpfr_set(r45786, r45785, MPFR_RNDN); };
        return mpfr_get_d(r45786, MPFR_RNDN);
}

static mpfr_t r45787, r45788, r45789, r45790, r45791, r45792, r45793, r45794, r45795, r45796, r45797, r45798, r45799, r45800, r45801, r45802, r45803, r45804, r45805, r45806, r45807, r45808, r45809, r45810, r45811, r45812;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45787);
        mpfr_init(r45788);
        mpfr_init(r45789);
        mpfr_init(r45790);
        mpfr_init(r45791);
        mpfr_init(r45792);
        mpfr_init(r45793);
        mpfr_init(r45794);
        mpfr_init(r45795);
        mpfr_init(r45796);
        mpfr_init(r45797);
        mpfr_init_set_str(r45798, "-5.533219044932495e-192", 10, MPFR_RNDN);
        mpfr_init(r45799);
        mpfr_init(r45800);
        mpfr_init(r45801);
        mpfr_init(r45802);
        mpfr_init(r45803);
        mpfr_init(r45804);
        mpfr_init(r45805);
        mpfr_init_set_str(r45806, "2.4573043102845598e-307", 10, MPFR_RNDN);
        mpfr_init(r45807);
        mpfr_init(r45808);
        mpfr_init(r45809);
        mpfr_init(r45810);
        mpfr_init(r45811);
        mpfr_init(r45812);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45787, x, MPFR_RNDN);
        mpfr_set_d(r45788, y, MPFR_RNDN);
        mpfr_set_d(r45789, z, MPFR_RNDN);
        mpfr_sub(r45790, r45788, r45789, MPFR_RNDN);
        mpfr_set_d(r45791, t, MPFR_RNDN);
        mpfr_sub(r45792, r45791, r45787, MPFR_RNDN);
        mpfr_set_d(r45793, a, MPFR_RNDN);
        mpfr_sub(r45794, r45793, r45789, MPFR_RNDN);
        mpfr_div(r45795, r45792, r45794, MPFR_RNDN);
        mpfr_mul(r45796, r45790, r45795, MPFR_RNDN);
        mpfr_add(r45797, r45787, r45796, MPFR_RNDN);
        ;
        mpfr_set_si(r45799, mpfr_cmp(r45797, r45798) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45800, r45794, MPFR_RNDN);
        mpfr_mul(r45801, r45800, r45800, MPFR_RNDN);
        mpfr_div(r45802, r45790, r45801, MPFR_RNDN);
        mpfr_div(r45803, r45792, r45800, MPFR_RNDN);
        mpfr_mul(r45804, r45802, r45803, MPFR_RNDN);
        mpfr_add(r45805, r45787, r45804, MPFR_RNDN);
        ;
        mpfr_set_si(r45807, mpfr_cmp(r45797, r45806) <= 0, MPFR_RNDN);
        mpfr_div(r45808, r45788, r45789, MPFR_RNDN);
        mpfr_mul(r45809, r45792, r45808, MPFR_RNDN);
        mpfr_sub(r45810, r45791, r45809, MPFR_RNDN);
        if (mpfr_get_si(r45807, MPFR_RNDN)) { mpfr_set(r45811, r45810, MPFR_RNDN); } else { mpfr_set(r45811, r45805, MPFR_RNDN); };
        if (mpfr_get_si(r45799, MPFR_RNDN)) { mpfr_set(r45812, r45805, MPFR_RNDN); } else { mpfr_set(r45812, r45811, MPFR_RNDN); };
        return mpfr_get_d(r45812, MPFR_RNDN);
}

