#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 r45656 = x;
        float r45657 = y;
        float r45658 = z;
        float r45659 = r45657 - r45658;
        float r45660 = t;
        float r45661 = r45660 - r45656;
        float r45662 = a;
        float r45663 = r45662 - r45658;
        float r45664 = r45661 / r45663;
        float r45665 = r45659 * r45664;
        float r45666 = r45656 + r45665;
        return r45666;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45667 = x;
        double r45668 = y;
        double r45669 = z;
        double r45670 = r45668 - r45669;
        double r45671 = t;
        double r45672 = r45671 - r45667;
        double r45673 = a;
        double r45674 = r45673 - r45669;
        double r45675 = r45672 / r45674;
        double r45676 = r45670 * r45675;
        double r45677 = r45667 + r45676;
        return r45677;
}


double f_of(float x, float y, float z, float t, float a) {
        float r45678 = a;
        float r45679 = -5.431975634518425e-180;
        bool r45680 = r45678 <= r45679;
        float r45681 = x;
        float r45682 = y;
        float r45683 = z;
        float r45684 = r45682 - r45683;
        float r45685 = r45678 - r45683;
        float r45686 = cbrt(r45685);
        float r45687 = r45686 * r45686;
        float r45688 = r45684 / r45687;
        float r45689 = t;
        float r45690 = r45689 - r45681;
        float r45691 = r45690 / r45686;
        float r45692 = r45688 * r45691;
        float r45693 = r45681 + r45692;
        float r45694 = 4.364749231637734e-136;
        bool r45695 = r45678 <= r45694;
        float r45696 = r45682 / r45683;
        float r45697 = r45690 * r45696;
        float r45698 = r45689 - r45697;
        float r45699 = cbrt(r45690);
        float r45700 = r45699 * r45699;
        float r45701 = r45700 / r45687;
        float r45702 = r45684 * r45701;
        float r45703 = r45699 / r45686;
        float r45704 = r45702 * r45703;
        float r45705 = r45681 + r45704;
        float r45706 = r45695 ? r45698 : r45705;
        float r45707 = r45680 ? r45693 : r45706;
        return r45707;
}

double f_od(double x, double y, double z, double t, double a) {
        double r45708 = a;
        double r45709 = -5.431975634518425e-180;
        bool r45710 = r45708 <= r45709;
        double r45711 = x;
        double r45712 = y;
        double r45713 = z;
        double r45714 = r45712 - r45713;
        double r45715 = r45708 - r45713;
        double r45716 = cbrt(r45715);
        double r45717 = r45716 * r45716;
        double r45718 = r45714 / r45717;
        double r45719 = t;
        double r45720 = r45719 - r45711;
        double r45721 = r45720 / r45716;
        double r45722 = r45718 * r45721;
        double r45723 = r45711 + r45722;
        double r45724 = 4.364749231637734e-136;
        bool r45725 = r45708 <= r45724;
        double r45726 = r45712 / r45713;
        double r45727 = r45720 * r45726;
        double r45728 = r45719 - r45727;
        double r45729 = cbrt(r45720);
        double r45730 = r45729 * r45729;
        double r45731 = r45730 / r45717;
        double r45732 = r45714 * r45731;
        double r45733 = r45729 / r45716;
        double r45734 = r45732 * r45733;
        double r45735 = r45711 + r45734;
        double r45736 = r45725 ? r45728 : r45735;
        double r45737 = r45710 ? r45723 : r45736;
        return r45737;
}

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 r45738, r45739, r45740, r45741, r45742, r45743, r45744, r45745, r45746, r45747, r45748;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1680);
        mpfr_init(r45738);
        mpfr_init(r45739);
        mpfr_init(r45740);
        mpfr_init(r45741);
        mpfr_init(r45742);
        mpfr_init(r45743);
        mpfr_init(r45744);
        mpfr_init(r45745);
        mpfr_init(r45746);
        mpfr_init(r45747);
        mpfr_init(r45748);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45738, x, MPFR_RNDN);
        mpfr_set_d(r45739, y, MPFR_RNDN);
        mpfr_set_d(r45740, z, MPFR_RNDN);
        mpfr_sub(r45741, r45739, r45740, MPFR_RNDN);
        mpfr_set_d(r45742, t, MPFR_RNDN);
        mpfr_sub(r45743, r45742, r45738, MPFR_RNDN);
        mpfr_set_d(r45744, a, MPFR_RNDN);
        mpfr_sub(r45745, r45744, r45740, MPFR_RNDN);
        mpfr_div(r45746, r45743, r45745, MPFR_RNDN);
        mpfr_mul(r45747, r45741, r45746, MPFR_RNDN);
        mpfr_add(r45748, r45738, r45747, MPFR_RNDN);
        return mpfr_get_d(r45748, MPFR_RNDN);
}

static mpfr_t r45749, r45750, r45751, r45752, r45753, r45754, r45755, r45756, r45757, r45758, r45759, r45760, r45761, r45762, r45763, r45764, r45765, r45766, r45767, r45768, r45769, r45770, r45771, r45772, r45773, r45774, r45775, r45776, r45777, r45778;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r45749);
        mpfr_init_set_str(r45750, "-5.431975634518425e-180", 10, MPFR_RNDN);
        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);
        mpfr_init(r45761);
        mpfr_init(r45762);
        mpfr_init(r45763);
        mpfr_init(r45764);
        mpfr_init_set_str(r45765, "4.364749231637734e-136", 10, MPFR_RNDN);
        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);
        mpfr_init(r45776);
        mpfr_init(r45777);
        mpfr_init(r45778);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45749, a, MPFR_RNDN);
        ;
        mpfr_set_si(r45751, mpfr_cmp(r45749, r45750) <= 0, MPFR_RNDN);
        mpfr_set_d(r45752, x, MPFR_RNDN);
        mpfr_set_d(r45753, y, MPFR_RNDN);
        mpfr_set_d(r45754, z, MPFR_RNDN);
        mpfr_sub(r45755, r45753, r45754, MPFR_RNDN);
        mpfr_sub(r45756, r45749, r45754, MPFR_RNDN);
        mpfr_cbrt(r45757, r45756, MPFR_RNDN);
        mpfr_mul(r45758, r45757, r45757, MPFR_RNDN);
        mpfr_div(r45759, r45755, r45758, MPFR_RNDN);
        mpfr_set_d(r45760, t, MPFR_RNDN);
        mpfr_sub(r45761, r45760, r45752, MPFR_RNDN);
        mpfr_div(r45762, r45761, r45757, MPFR_RNDN);
        mpfr_mul(r45763, r45759, r45762, MPFR_RNDN);
        mpfr_add(r45764, r45752, r45763, MPFR_RNDN);
        ;
        mpfr_set_si(r45766, mpfr_cmp(r45749, r45765) <= 0, MPFR_RNDN);
        mpfr_div(r45767, r45753, r45754, MPFR_RNDN);
        mpfr_mul(r45768, r45761, r45767, MPFR_RNDN);
        mpfr_sub(r45769, r45760, r45768, MPFR_RNDN);
        mpfr_cbrt(r45770, r45761, MPFR_RNDN);
        mpfr_mul(r45771, r45770, r45770, MPFR_RNDN);
        mpfr_div(r45772, r45771, r45758, MPFR_RNDN);
        mpfr_mul(r45773, r45755, r45772, MPFR_RNDN);
        mpfr_div(r45774, r45770, r45757, MPFR_RNDN);
        mpfr_mul(r45775, r45773, r45774, MPFR_RNDN);
        mpfr_add(r45776, r45752, r45775, MPFR_RNDN);
        if (mpfr_get_si(r45766, MPFR_RNDN)) { mpfr_set(r45777, r45769, MPFR_RNDN); } else { mpfr_set(r45777, r45776, MPFR_RNDN); };
        if (mpfr_get_si(r45751, MPFR_RNDN)) { mpfr_set(r45778, r45764, MPFR_RNDN); } else { mpfr_set(r45778, r45777, MPFR_RNDN); };
        return mpfr_get_d(r45778, MPFR_RNDN);
}

static mpfr_t r45779, r45780, r45781, r45782, r45783, r45784, r45785, r45786, r45787, r45788, r45789, r45790, r45791, r45792, r45793, r45794, r45795, r45796, r45797, r45798, r45799, r45800, r45801, r45802, r45803, r45804, r45805, r45806, r45807, r45808;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1680);
        mpfr_init(r45779);
        mpfr_init_set_str(r45780, "-5.431975634518425e-180", 10, MPFR_RNDN);
        mpfr_init(r45781);
        mpfr_init(r45782);
        mpfr_init(r45783);
        mpfr_init(r45784);
        mpfr_init(r45785);
        mpfr_init(r45786);
        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_set_str(r45795, "4.364749231637734e-136", 10, MPFR_RNDN);
        mpfr_init(r45796);
        mpfr_init(r45797);
        mpfr_init(r45798);
        mpfr_init(r45799);
        mpfr_init(r45800);
        mpfr_init(r45801);
        mpfr_init(r45802);
        mpfr_init(r45803);
        mpfr_init(r45804);
        mpfr_init(r45805);
        mpfr_init(r45806);
        mpfr_init(r45807);
        mpfr_init(r45808);
}

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

