#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 r45884 = x;
        float r45885 = y;
        float r45886 = z;
        float r45887 = r45885 - r45886;
        float r45888 = t;
        float r45889 = r45888 - r45884;
        float r45890 = a;
        float r45891 = r45890 - r45886;
        float r45892 = r45889 / r45891;
        float r45893 = r45887 * r45892;
        float r45894 = r45884 + r45893;
        return r45894;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45895 = x;
        double r45896 = y;
        double r45897 = z;
        double r45898 = r45896 - r45897;
        double r45899 = t;
        double r45900 = r45899 - r45895;
        double r45901 = a;
        double r45902 = r45901 - r45897;
        double r45903 = r45900 / r45902;
        double r45904 = r45898 * r45903;
        double r45905 = r45895 + r45904;
        return r45905;
}


double f_of(float x, float y, float z, float t, float a) {
        float r45906 = x;
        float r45907 = y;
        float r45908 = z;
        float r45909 = r45907 - r45908;
        float r45910 = t;
        float r45911 = r45910 - r45906;
        float r45912 = a;
        float r45913 = r45912 - r45908;
        float r45914 = r45911 / r45913;
        float r45915 = r45909 * r45914;
        float r45916 = r45906 + r45915;
        float r45917 = -6.090130279416385e-196;
        bool r45918 = r45916 <= r45917;
        float r45919 = cbrt(r45911);
        float r45920 = r45919 * r45919;
        float r45921 = cbrt(r45913);
        float r45922 = r45921 * r45921;
        float r45923 = r45920 / r45922;
        float r45924 = r45909 * r45923;
        float r45925 = cbrt(r45922);
        float r45926 = cbrt(r45921);
        float r45927 = r45925 * r45926;
        float r45928 = r45919 / r45927;
        float r45929 = r45924 * r45928;
        float r45930 = r45906 + r45929;
        float r45931 = 4.7656810866124795e-307;
        bool r45932 = r45916 <= r45931;
        float r45933 = r45907 / r45908;
        float r45934 = r45911 * r45933;
        float r45935 = r45910 - r45934;
        float r45936 = r45932 ? r45935 : r45930;
        float r45937 = r45918 ? r45930 : r45936;
        return r45937;
}

double f_od(double x, double y, double z, double t, double a) {
        double r45938 = x;
        double r45939 = y;
        double r45940 = z;
        double r45941 = r45939 - r45940;
        double r45942 = t;
        double r45943 = r45942 - r45938;
        double r45944 = a;
        double r45945 = r45944 - r45940;
        double r45946 = r45943 / r45945;
        double r45947 = r45941 * r45946;
        double r45948 = r45938 + r45947;
        double r45949 = -6.090130279416385e-196;
        bool r45950 = r45948 <= r45949;
        double r45951 = cbrt(r45943);
        double r45952 = r45951 * r45951;
        double r45953 = cbrt(r45945);
        double r45954 = r45953 * r45953;
        double r45955 = r45952 / r45954;
        double r45956 = r45941 * r45955;
        double r45957 = cbrt(r45954);
        double r45958 = cbrt(r45953);
        double r45959 = r45957 * r45958;
        double r45960 = r45951 / r45959;
        double r45961 = r45956 * r45960;
        double r45962 = r45938 + r45961;
        double r45963 = 4.7656810866124795e-307;
        bool r45964 = r45948 <= r45963;
        double r45965 = r45939 / r45940;
        double r45966 = r45943 * r45965;
        double r45967 = r45942 - r45966;
        double r45968 = r45964 ? r45967 : r45962;
        double r45969 = r45950 ? r45962 : r45968;
        return r45969;
}

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 r45970, r45971, r45972, r45973, r45974, r45975, r45976, r45977, r45978, r45979, r45980;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45970);
        mpfr_init(r45971);
        mpfr_init(r45972);
        mpfr_init(r45973);
        mpfr_init(r45974);
        mpfr_init(r45975);
        mpfr_init(r45976);
        mpfr_init(r45977);
        mpfr_init(r45978);
        mpfr_init(r45979);
        mpfr_init(r45980);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45970, x, MPFR_RNDN);
        mpfr_set_d(r45971, y, MPFR_RNDN);
        mpfr_set_d(r45972, z, MPFR_RNDN);
        mpfr_sub(r45973, r45971, r45972, MPFR_RNDN);
        mpfr_set_d(r45974, t, MPFR_RNDN);
        mpfr_sub(r45975, r45974, r45970, MPFR_RNDN);
        mpfr_set_d(r45976, a, MPFR_RNDN);
        mpfr_sub(r45977, r45976, r45972, MPFR_RNDN);
        mpfr_div(r45978, r45975, r45977, MPFR_RNDN);
        mpfr_mul(r45979, r45973, r45978, MPFR_RNDN);
        mpfr_add(r45980, r45970, r45979, MPFR_RNDN);
        return mpfr_get_d(r45980, MPFR_RNDN);
}

static mpfr_t r45981, r45982, r45983, r45984, r45985, r45986, r45987, r45988, r45989, r45990, r45991, r45992, r45993, r45994, r45995, r45996, r45997, r45998, r45999, r46000, r46001, r46002, r46003, r46004, r46005, r46006, r46007, r46008, r46009, r46010, r46011, r46012;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45981);
        mpfr_init(r45982);
        mpfr_init(r45983);
        mpfr_init(r45984);
        mpfr_init(r45985);
        mpfr_init(r45986);
        mpfr_init(r45987);
        mpfr_init(r45988);
        mpfr_init(r45989);
        mpfr_init(r45990);
        mpfr_init(r45991);
        mpfr_init_set_str(r45992, "-6.090130279416385e-196", 10, MPFR_RNDN);
        mpfr_init(r45993);
        mpfr_init(r45994);
        mpfr_init(r45995);
        mpfr_init(r45996);
        mpfr_init(r45997);
        mpfr_init(r45998);
        mpfr_init(r45999);
        mpfr_init(r46000);
        mpfr_init(r46001);
        mpfr_init(r46002);
        mpfr_init(r46003);
        mpfr_init(r46004);
        mpfr_init(r46005);
        mpfr_init_set_str(r46006, "4.7656810866124795e-307", 10, MPFR_RNDN);
        mpfr_init(r46007);
        mpfr_init(r46008);
        mpfr_init(r46009);
        mpfr_init(r46010);
        mpfr_init(r46011);
        mpfr_init(r46012);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45981, x, MPFR_RNDN);
        mpfr_set_d(r45982, y, MPFR_RNDN);
        mpfr_set_d(r45983, z, MPFR_RNDN);
        mpfr_sub(r45984, r45982, r45983, MPFR_RNDN);
        mpfr_set_d(r45985, t, MPFR_RNDN);
        mpfr_sub(r45986, r45985, r45981, MPFR_RNDN);
        mpfr_set_d(r45987, a, MPFR_RNDN);
        mpfr_sub(r45988, r45987, r45983, MPFR_RNDN);
        mpfr_div(r45989, r45986, r45988, MPFR_RNDN);
        mpfr_mul(r45990, r45984, r45989, MPFR_RNDN);
        mpfr_add(r45991, r45981, r45990, MPFR_RNDN);
        ;
        mpfr_set_si(r45993, mpfr_cmp(r45991, r45992) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45994, r45986, MPFR_RNDN);
        mpfr_mul(r45995, r45994, r45994, MPFR_RNDN);
        mpfr_cbrt(r45996, r45988, MPFR_RNDN);
        mpfr_mul(r45997, r45996, r45996, MPFR_RNDN);
        mpfr_div(r45998, r45995, r45997, MPFR_RNDN);
        mpfr_mul(r45999, r45984, r45998, MPFR_RNDN);
        mpfr_cbrt(r46000, r45997, MPFR_RNDN);
        mpfr_cbrt(r46001, r45996, MPFR_RNDN);
        mpfr_mul(r46002, r46000, r46001, MPFR_RNDN);
        mpfr_div(r46003, r45994, r46002, MPFR_RNDN);
        mpfr_mul(r46004, r45999, r46003, MPFR_RNDN);
        mpfr_add(r46005, r45981, r46004, MPFR_RNDN);
        ;
        mpfr_set_si(r46007, mpfr_cmp(r45991, r46006) <= 0, MPFR_RNDN);
        mpfr_div(r46008, r45982, r45983, MPFR_RNDN);
        mpfr_mul(r46009, r45986, r46008, MPFR_RNDN);
        mpfr_sub(r46010, r45985, r46009, MPFR_RNDN);
        if (mpfr_get_si(r46007, MPFR_RNDN)) { mpfr_set(r46011, r46010, MPFR_RNDN); } else { mpfr_set(r46011, r46005, MPFR_RNDN); };
        if (mpfr_get_si(r45993, MPFR_RNDN)) { mpfr_set(r46012, r46005, MPFR_RNDN); } else { mpfr_set(r46012, r46011, MPFR_RNDN); };
        return mpfr_get_d(r46012, MPFR_RNDN);
}

static mpfr_t r46013, r46014, r46015, r46016, r46017, r46018, r46019, r46020, r46021, r46022, r46023, r46024, r46025, r46026, r46027, r46028, r46029, r46030, r46031, r46032, r46033, r46034, r46035, r46036, r46037, r46038, r46039, r46040, r46041, r46042, r46043, r46044;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r46013);
        mpfr_init(r46014);
        mpfr_init(r46015);
        mpfr_init(r46016);
        mpfr_init(r46017);
        mpfr_init(r46018);
        mpfr_init(r46019);
        mpfr_init(r46020);
        mpfr_init(r46021);
        mpfr_init(r46022);
        mpfr_init(r46023);
        mpfr_init_set_str(r46024, "-6.090130279416385e-196", 10, MPFR_RNDN);
        mpfr_init(r46025);
        mpfr_init(r46026);
        mpfr_init(r46027);
        mpfr_init(r46028);
        mpfr_init(r46029);
        mpfr_init(r46030);
        mpfr_init(r46031);
        mpfr_init(r46032);
        mpfr_init(r46033);
        mpfr_init(r46034);
        mpfr_init(r46035);
        mpfr_init(r46036);
        mpfr_init(r46037);
        mpfr_init_set_str(r46038, "4.7656810866124795e-307", 10, MPFR_RNDN);
        mpfr_init(r46039);
        mpfr_init(r46040);
        mpfr_init(r46041);
        mpfr_init(r46042);
        mpfr_init(r46043);
        mpfr_init(r46044);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r46013, x, MPFR_RNDN);
        mpfr_set_d(r46014, y, MPFR_RNDN);
        mpfr_set_d(r46015, z, MPFR_RNDN);
        mpfr_sub(r46016, r46014, r46015, MPFR_RNDN);
        mpfr_set_d(r46017, t, MPFR_RNDN);
        mpfr_sub(r46018, r46017, r46013, MPFR_RNDN);
        mpfr_set_d(r46019, a, MPFR_RNDN);
        mpfr_sub(r46020, r46019, r46015, MPFR_RNDN);
        mpfr_div(r46021, r46018, r46020, MPFR_RNDN);
        mpfr_mul(r46022, r46016, r46021, MPFR_RNDN);
        mpfr_add(r46023, r46013, r46022, MPFR_RNDN);
        ;
        mpfr_set_si(r46025, mpfr_cmp(r46023, r46024) <= 0, MPFR_RNDN);
        mpfr_cbrt(r46026, r46018, MPFR_RNDN);
        mpfr_mul(r46027, r46026, r46026, MPFR_RNDN);
        mpfr_cbrt(r46028, r46020, MPFR_RNDN);
        mpfr_mul(r46029, r46028, r46028, MPFR_RNDN);
        mpfr_div(r46030, r46027, r46029, MPFR_RNDN);
        mpfr_mul(r46031, r46016, r46030, MPFR_RNDN);
        mpfr_cbrt(r46032, r46029, MPFR_RNDN);
        mpfr_cbrt(r46033, r46028, MPFR_RNDN);
        mpfr_mul(r46034, r46032, r46033, MPFR_RNDN);
        mpfr_div(r46035, r46026, r46034, MPFR_RNDN);
        mpfr_mul(r46036, r46031, r46035, MPFR_RNDN);
        mpfr_add(r46037, r46013, r46036, MPFR_RNDN);
        ;
        mpfr_set_si(r46039, mpfr_cmp(r46023, r46038) <= 0, MPFR_RNDN);
        mpfr_div(r46040, r46014, r46015, MPFR_RNDN);
        mpfr_mul(r46041, r46018, r46040, MPFR_RNDN);
        mpfr_sub(r46042, r46017, r46041, MPFR_RNDN);
        if (mpfr_get_si(r46039, MPFR_RNDN)) { mpfr_set(r46043, r46042, MPFR_RNDN); } else { mpfr_set(r46043, r46037, MPFR_RNDN); };
        if (mpfr_get_si(r46025, MPFR_RNDN)) { mpfr_set(r46044, r46037, MPFR_RNDN); } else { mpfr_set(r46044, r46043, MPFR_RNDN); };
        return mpfr_get_d(r46044, MPFR_RNDN);
}

