#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 r45428 = x;
        float r45429 = y;
        float r45430 = z;
        float r45431 = r45429 - r45430;
        float r45432 = t;
        float r45433 = r45432 - r45428;
        float r45434 = a;
        float r45435 = r45434 - r45430;
        float r45436 = r45433 / r45435;
        float r45437 = r45431 * r45436;
        float r45438 = r45428 + r45437;
        return r45438;
}

double f_id(double x, double y, double z, double t, double a) {
        double r45439 = x;
        double r45440 = y;
        double r45441 = z;
        double r45442 = r45440 - r45441;
        double r45443 = t;
        double r45444 = r45443 - r45439;
        double r45445 = a;
        double r45446 = r45445 - r45441;
        double r45447 = r45444 / r45446;
        double r45448 = r45442 * r45447;
        double r45449 = r45439 + r45448;
        return r45449;
}


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

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

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 r45502, r45503, r45504, r45505, r45506, r45507, r45508, r45509, r45510, r45511, r45512;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45502);
        mpfr_init(r45503);
        mpfr_init(r45504);
        mpfr_init(r45505);
        mpfr_init(r45506);
        mpfr_init(r45507);
        mpfr_init(r45508);
        mpfr_init(r45509);
        mpfr_init(r45510);
        mpfr_init(r45511);
        mpfr_init(r45512);
}

double f_im(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45502, x, MPFR_RNDN);
        mpfr_set_d(r45503, y, MPFR_RNDN);
        mpfr_set_d(r45504, z, MPFR_RNDN);
        mpfr_sub(r45505, r45503, r45504, MPFR_RNDN);
        mpfr_set_d(r45506, t, MPFR_RNDN);
        mpfr_sub(r45507, r45506, r45502, MPFR_RNDN);
        mpfr_set_d(r45508, a, MPFR_RNDN);
        mpfr_sub(r45509, r45508, r45504, MPFR_RNDN);
        mpfr_div(r45510, r45507, r45509, MPFR_RNDN);
        mpfr_mul(r45511, r45505, r45510, MPFR_RNDN);
        mpfr_add(r45512, r45502, r45511, MPFR_RNDN);
        return mpfr_get_d(r45512, MPFR_RNDN);
}

static mpfr_t r45513, r45514, r45515, r45516, r45517, r45518, r45519, r45520, r45521, r45522, r45523, r45524, r45525, r45526, r45527, r45528, r45529, r45530, r45531, r45532, r45533, r45534, r45535, r45536, r45537, r45538;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45513);
        mpfr_init(r45514);
        mpfr_init(r45515);
        mpfr_init(r45516);
        mpfr_init(r45517);
        mpfr_init(r45518);
        mpfr_init(r45519);
        mpfr_init(r45520);
        mpfr_init(r45521);
        mpfr_init(r45522);
        mpfr_init(r45523);
        mpfr_init_set_str(r45524, "-6.090130279416385e-196", 10, MPFR_RNDN);
        mpfr_init(r45525);
        mpfr_init(r45526);
        mpfr_init(r45527);
        mpfr_init(r45528);
        mpfr_init(r45529);
        mpfr_init(r45530);
        mpfr_init(r45531);
        mpfr_init_set_str(r45532, "4.7656810866124795e-307", 10, MPFR_RNDN);
        mpfr_init(r45533);
        mpfr_init(r45534);
        mpfr_init(r45535);
        mpfr_init(r45536);
        mpfr_init(r45537);
        mpfr_init(r45538);
}

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

static mpfr_t r45539, r45540, r45541, r45542, r45543, r45544, r45545, r45546, r45547, r45548, r45549, r45550, r45551, r45552, r45553, r45554, r45555, r45556, r45557, r45558, r45559, r45560, r45561, r45562, r45563, r45564;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r45539);
        mpfr_init(r45540);
        mpfr_init(r45541);
        mpfr_init(r45542);
        mpfr_init(r45543);
        mpfr_init(r45544);
        mpfr_init(r45545);
        mpfr_init(r45546);
        mpfr_init(r45547);
        mpfr_init(r45548);
        mpfr_init(r45549);
        mpfr_init_set_str(r45550, "-6.090130279416385e-196", 10, MPFR_RNDN);
        mpfr_init(r45551);
        mpfr_init(r45552);
        mpfr_init(r45553);
        mpfr_init(r45554);
        mpfr_init(r45555);
        mpfr_init(r45556);
        mpfr_init(r45557);
        mpfr_init_set_str(r45558, "4.7656810866124795e-307", 10, MPFR_RNDN);
        mpfr_init(r45559);
        mpfr_init(r45560);
        mpfr_init(r45561);
        mpfr_init(r45562);
        mpfr_init(r45563);
        mpfr_init(r45564);
}

double f_dm(double x, double y, double z, double t, double a) {
        mpfr_set_d(r45539, x, MPFR_RNDN);
        mpfr_set_d(r45540, y, MPFR_RNDN);
        mpfr_set_d(r45541, z, MPFR_RNDN);
        mpfr_sub(r45542, r45540, r45541, MPFR_RNDN);
        mpfr_set_d(r45543, t, MPFR_RNDN);
        mpfr_sub(r45544, r45543, r45539, MPFR_RNDN);
        mpfr_set_d(r45545, a, MPFR_RNDN);
        mpfr_sub(r45546, r45545, r45541, MPFR_RNDN);
        mpfr_div(r45547, r45544, r45546, MPFR_RNDN);
        mpfr_mul(r45548, r45542, r45547, MPFR_RNDN);
        mpfr_add(r45549, r45539, r45548, MPFR_RNDN);
        ;
        mpfr_set_si(r45551, mpfr_cmp(r45549, r45550) <= 0, MPFR_RNDN);
        mpfr_cbrt(r45552, r45546, MPFR_RNDN);
        mpfr_mul(r45553, r45552, r45552, MPFR_RNDN);
        mpfr_div(r45554, r45542, r45553, MPFR_RNDN);
        mpfr_div(r45555, r45544, r45552, MPFR_RNDN);
        mpfr_mul(r45556, r45554, r45555, MPFR_RNDN);
        mpfr_add(r45557, r45539, r45556, MPFR_RNDN);
        ;
        mpfr_set_si(r45559, mpfr_cmp(r45549, r45558) <= 0, MPFR_RNDN);
        mpfr_div(r45560, r45540, r45541, MPFR_RNDN);
        mpfr_mul(r45561, r45544, r45560, MPFR_RNDN);
        mpfr_sub(r45562, r45543, r45561, MPFR_RNDN);
        if (mpfr_get_si(r45559, MPFR_RNDN)) { mpfr_set(r45563, r45562, MPFR_RNDN); } else { mpfr_set(r45563, r45557, MPFR_RNDN); };
        if (mpfr_get_si(r45551, MPFR_RNDN)) { mpfr_set(r45564, r45557, MPFR_RNDN); } else { mpfr_set(r45564, r45563, MPFR_RNDN); };
        return mpfr_get_d(r45564, MPFR_RNDN);
}

