#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 r45424 = x;
        float r45425 = y;
        float r45426 = z;
        float r45427 = r45425 - r45426;
        float r45428 = t;
        float r45429 = r45428 - r45424;
        float r45430 = a;
        float r45431 = r45430 - r45426;
        float r45432 = r45429 / r45431;
        float r45433 = r45427 * r45432;
        float r45434 = r45424 + r45433;
        return r45434;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45435 = x;
        double r45436 = y;
        double r45437 = z;
        double r45438 = r45436 - r45437;
        double r45439 = t;
        double r45440 = r45439 - r45435;
        double r45441 = a;
        double r45442 = r45441 - r45437;
        double r45443 = r45440 / r45442;
        double r45444 = r45438 * r45443;
        double r45445 = r45435 + r45444;
        return r45445;
}


double f_of(float x, float y, float z, float t, float a) {
        float r45446 = a;
        float r45447 = -4.2533961552866985e-171;
        bool r45448 = r45446 <= r45447;
        float r45449 = x;
        float r45450 = y;
        float r45451 = z;
        float r45452 = r45450 - r45451;
        float r45453 = r45446 - r45451;
        float r45454 = cbrt(r45453);
        float r45455 = r45454 * r45454;
        float r45456 = r45452 / r45455;
        float r45457 = t;
        float r45458 = r45457 - r45449;
        float r45459 = r45458 / r45454;
        float r45460 = r45456 * r45459;
        float r45461 = r45449 + r45460;
        float r45462 = 3.068964686704889e-137;
        bool r45463 = r45446 <= r45462;
        float r45464 = r45450 / r45451;
        float r45465 = r45458 * r45464;
        float r45466 = r45457 - r45465;
        float r45467 = cbrt(r45458);
        float r45468 = r45467 * r45467;
        float r45469 = r45468 / r45455;
        float r45470 = r45452 * r45469;
        float r45471 = r45467 / r45454;
        float r45472 = r45470 * r45471;
        float r45473 = r45449 + r45472;
        float r45474 = r45463 ? r45466 : r45473;
        float r45475 = r45448 ? r45461 : r45474;
        return r45475;
}

double f_od(double x, double y, double z, double t, double a) {
        double r45476 = a;
        double r45477 = -4.2533961552866985e-171;
        bool r45478 = r45476 <= r45477;
        double r45479 = x;
        double r45480 = y;
        double r45481 = z;
        double r45482 = r45480 - r45481;
        double r45483 = r45476 - r45481;
        double r45484 = cbrt(r45483);
        double r45485 = r45484 * r45484;
        double r45486 = r45482 / r45485;
        double r45487 = t;
        double r45488 = r45487 - r45479;
        double r45489 = r45488 / r45484;
        double r45490 = r45486 * r45489;
        double r45491 = r45479 + r45490;
        double r45492 = 3.068964686704889e-137;
        bool r45493 = r45476 <= r45492;
        double r45494 = r45480 / r45481;
        double r45495 = r45488 * r45494;
        double r45496 = r45487 - r45495;
        double r45497 = cbrt(r45488);
        double r45498 = r45497 * r45497;
        double r45499 = r45498 / r45485;
        double r45500 = r45482 * r45499;
        double r45501 = r45497 / r45484;
        double r45502 = r45500 * r45501;
        double r45503 = r45479 + r45502;
        double r45504 = r45493 ? r45496 : r45503;
        double r45505 = r45478 ? r45491 : r45504;
        return r45505;
}

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 r45506, r45507, r45508, r45509, r45510, r45511, r45512, r45513, r45514, r45515, r45516;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45506);
        mpfr_init(r45507);
        mpfr_init(r45508);
        mpfr_init(r45509);
        mpfr_init(r45510);
        mpfr_init(r45511);
        mpfr_init(r45512);
        mpfr_init(r45513);
        mpfr_init(r45514);
        mpfr_init(r45515);
        mpfr_init(r45516);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45506, x, MPFR_RNDN);
        mpfr_set_d(r45507, y, MPFR_RNDN);
        mpfr_set_d(r45508, z, MPFR_RNDN);
        mpfr_sub(r45509, r45507, r45508, MPFR_RNDN);
        mpfr_set_d(r45510, t, MPFR_RNDN);
        mpfr_sub(r45511, r45510, r45506, MPFR_RNDN);
        mpfr_set_d(r45512, a, MPFR_RNDN);
        mpfr_sub(r45513, r45512, r45508, MPFR_RNDN);
        mpfr_div(r45514, r45511, r45513, MPFR_RNDN);
        mpfr_mul(r45515, r45509, r45514, MPFR_RNDN);
        mpfr_add(r45516, r45506, r45515, MPFR_RNDN);
        return mpfr_get_d(r45516, MPFR_RNDN);
}

static mpfr_t r45517, r45518, r45519, r45520, r45521, r45522, r45523, r45524, r45525, r45526, r45527, r45528, r45529, r45530, r45531, r45532, r45533, r45534, r45535, r45536, r45537, r45538, r45539, r45540, r45541, r45542, r45543, r45544, r45545, r45546;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45517);
        mpfr_init_set_str(r45518, "-4.2533961552866985e-171", 10, MPFR_RNDN);
        mpfr_init(r45519);
        mpfr_init(r45520);
        mpfr_init(r45521);
        mpfr_init(r45522);
        mpfr_init(r45523);
        mpfr_init(r45524);
        mpfr_init(r45525);
        mpfr_init(r45526);
        mpfr_init(r45527);
        mpfr_init(r45528);
        mpfr_init(r45529);
        mpfr_init(r45530);
        mpfr_init(r45531);
        mpfr_init(r45532);
        mpfr_init_set_str(r45533, "3.068964686704889e-137", 10, MPFR_RNDN);
        mpfr_init(r45534);
        mpfr_init(r45535);
        mpfr_init(r45536);
        mpfr_init(r45537);
        mpfr_init(r45538);
        mpfr_init(r45539);
        mpfr_init(r45540);
        mpfr_init(r45541);
        mpfr_init(r45542);
        mpfr_init(r45543);
        mpfr_init(r45544);
        mpfr_init(r45545);
        mpfr_init(r45546);
}

double f_fm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45517, a, MPFR_RNDN);
        ;
        mpfr_set_si(r45519, mpfr_cmp(r45517, r45518) <= 0, MPFR_RNDN);
        mpfr_set_d(r45520, x, MPFR_RNDN);
        mpfr_set_d(r45521, y, MPFR_RNDN);
        mpfr_set_d(r45522, z, MPFR_RNDN);
        mpfr_sub(r45523, r45521, r45522, MPFR_RNDN);
        mpfr_sub(r45524, r45517, r45522, MPFR_RNDN);
        mpfr_cbrt(r45525, r45524, MPFR_RNDN);
        mpfr_mul(r45526, r45525, r45525, MPFR_RNDN);
        mpfr_div(r45527, r45523, r45526, MPFR_RNDN);
        mpfr_set_d(r45528, t, MPFR_RNDN);
        mpfr_sub(r45529, r45528, r45520, MPFR_RNDN);
        mpfr_div(r45530, r45529, r45525, MPFR_RNDN);
        mpfr_mul(r45531, r45527, r45530, MPFR_RNDN);
        mpfr_add(r45532, r45520, r45531, MPFR_RNDN);
        ;
        mpfr_set_si(r45534, mpfr_cmp(r45517, r45533) <= 0, MPFR_RNDN);
        mpfr_div(r45535, r45521, r45522, MPFR_RNDN);
        mpfr_mul(r45536, r45529, r45535, MPFR_RNDN);
        mpfr_sub(r45537, r45528, r45536, MPFR_RNDN);
        mpfr_cbrt(r45538, r45529, MPFR_RNDN);
        mpfr_mul(r45539, r45538, r45538, MPFR_RNDN);
        mpfr_div(r45540, r45539, r45526, MPFR_RNDN);
        mpfr_mul(r45541, r45523, r45540, MPFR_RNDN);
        mpfr_div(r45542, r45538, r45525, MPFR_RNDN);
        mpfr_mul(r45543, r45541, r45542, MPFR_RNDN);
        mpfr_add(r45544, r45520, r45543, MPFR_RNDN);
        if (mpfr_get_si(r45534, MPFR_RNDN)) { mpfr_set(r45545, r45537, MPFR_RNDN); } else { mpfr_set(r45545, r45544, MPFR_RNDN); };
        if (mpfr_get_si(r45519, MPFR_RNDN)) { mpfr_set(r45546, r45532, MPFR_RNDN); } else { mpfr_set(r45546, r45545, MPFR_RNDN); };
        return mpfr_get_d(r45546, MPFR_RNDN);
}

static mpfr_t r45547, r45548, r45549, r45550, r45551, r45552, r45553, r45554, r45555, r45556, r45557, r45558, r45559, r45560, r45561, r45562, r45563, r45564, r45565, r45566, r45567, r45568, r45569, r45570, r45571, r45572, r45573, r45574, r45575, r45576;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45547);
        mpfr_init_set_str(r45548, "-4.2533961552866985e-171", 10, MPFR_RNDN);
        mpfr_init(r45549);
        mpfr_init(r45550);
        mpfr_init(r45551);
        mpfr_init(r45552);
        mpfr_init(r45553);
        mpfr_init(r45554);
        mpfr_init(r45555);
        mpfr_init(r45556);
        mpfr_init(r45557);
        mpfr_init(r45558);
        mpfr_init(r45559);
        mpfr_init(r45560);
        mpfr_init(r45561);
        mpfr_init(r45562);
        mpfr_init_set_str(r45563, "3.068964686704889e-137", 10, MPFR_RNDN);
        mpfr_init(r45564);
        mpfr_init(r45565);
        mpfr_init(r45566);
        mpfr_init(r45567);
        mpfr_init(r45568);
        mpfr_init(r45569);
        mpfr_init(r45570);
        mpfr_init(r45571);
        mpfr_init(r45572);
        mpfr_init(r45573);
        mpfr_init(r45574);
        mpfr_init(r45575);
        mpfr_init(r45576);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45547, a, MPFR_RNDN);
        ;
        mpfr_set_si(r45549, mpfr_cmp(r45547, r45548) <= 0, MPFR_RNDN);
        mpfr_set_d(r45550, x, MPFR_RNDN);
        mpfr_set_d(r45551, y, MPFR_RNDN);
        mpfr_set_d(r45552, z, MPFR_RNDN);
        mpfr_sub(r45553, r45551, r45552, MPFR_RNDN);
        mpfr_sub(r45554, r45547, r45552, MPFR_RNDN);
        mpfr_cbrt(r45555, r45554, MPFR_RNDN);
        mpfr_mul(r45556, r45555, r45555, MPFR_RNDN);
        mpfr_div(r45557, r45553, r45556, MPFR_RNDN);
        mpfr_set_d(r45558, t, MPFR_RNDN);
        mpfr_sub(r45559, r45558, r45550, MPFR_RNDN);
        mpfr_div(r45560, r45559, r45555, MPFR_RNDN);
        mpfr_mul(r45561, r45557, r45560, MPFR_RNDN);
        mpfr_add(r45562, r45550, r45561, MPFR_RNDN);
        ;
        mpfr_set_si(r45564, mpfr_cmp(r45547, r45563) <= 0, MPFR_RNDN);
        mpfr_div(r45565, r45551, r45552, MPFR_RNDN);
        mpfr_mul(r45566, r45559, r45565, MPFR_RNDN);
        mpfr_sub(r45567, r45558, r45566, MPFR_RNDN);
        mpfr_cbrt(r45568, r45559, MPFR_RNDN);
        mpfr_mul(r45569, r45568, r45568, MPFR_RNDN);
        mpfr_div(r45570, r45569, r45556, MPFR_RNDN);
        mpfr_mul(r45571, r45553, r45570, MPFR_RNDN);
        mpfr_div(r45572, r45568, r45555, MPFR_RNDN);
        mpfr_mul(r45573, r45571, r45572, MPFR_RNDN);
        mpfr_add(r45574, r45550, r45573, MPFR_RNDN);
        if (mpfr_get_si(r45564, MPFR_RNDN)) { mpfr_set(r45575, r45567, MPFR_RNDN); } else { mpfr_set(r45575, r45574, MPFR_RNDN); };
        if (mpfr_get_si(r45549, MPFR_RNDN)) { mpfr_set(r45576, r45562, MPFR_RNDN); } else { mpfr_set(r45576, r45575, MPFR_RNDN); };
        return mpfr_get_d(r45576, MPFR_RNDN);
}

