#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Numeric.Signal.Multichannel:$cget from hsignal-0.2.7.1";

double f_if(float x, float y, float z, float t) {
        float r42646 = x;
        float r42647 = y;
        float r42648 = r42646 / r42647;
        float r42649 = z;
        float r42650 = t;
        float r42651 = r42649 - r42650;
        float r42652 = r42648 * r42651;
        float r42653 = r42652 + r42650;
        return r42653;
}

double f_id(double x, double y, double z, double t) {
        double r42654 = x;
        double r42655 = y;
        double r42656 = r42654 / r42655;
        double r42657 = z;
        double r42658 = t;
        double r42659 = r42657 - r42658;
        double r42660 = r42656 * r42659;
        double r42661 = r42660 + r42658;
        return r42661;
}


double f_of(float x, float y, float z, float t) {
        float r42662 = x;
        float r42663 = y;
        float r42664 = r42662 / r42663;
        float r42665 = z;
        float r42666 = r42664 * r42665;
        float r42667 = t;
        float r42668 = -r42667;
        float r42669 = r42664 * r42668;
        float r42670 = r42666 + r42669;
        float r42671 = r42670 + r42667;
        return r42671;
}

double f_od(double x, double y, double z, double t) {
        double r42672 = x;
        double r42673 = y;
        double r42674 = r42672 / r42673;
        double r42675 = z;
        double r42676 = r42674 * r42675;
        double r42677 = t;
        double r42678 = -r42677;
        double r42679 = r42674 * r42678;
        double r42680 = r42676 + r42679;
        double r42681 = r42680 + r42677;
        return r42681;
}

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 r42682, r42683, r42684, r42685, r42686, r42687, r42688, r42689;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r42682);
        mpfr_init(r42683);
        mpfr_init(r42684);
        mpfr_init(r42685);
        mpfr_init(r42686);
        mpfr_init(r42687);
        mpfr_init(r42688);
        mpfr_init(r42689);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r42682, x, MPFR_RNDN);
        mpfr_set_d(r42683, y, MPFR_RNDN);
        mpfr_div(r42684, r42682, r42683, MPFR_RNDN);
        mpfr_set_d(r42685, z, MPFR_RNDN);
        mpfr_set_d(r42686, t, MPFR_RNDN);
        mpfr_sub(r42687, r42685, r42686, MPFR_RNDN);
        mpfr_mul(r42688, r42684, r42687, MPFR_RNDN);
        mpfr_add(r42689, r42688, r42686, MPFR_RNDN);
        return mpfr_get_d(r42689, MPFR_RNDN);
}

static mpfr_t r42690, r42691, r42692, r42693, r42694, r42695, r42696, r42697, r42698, r42699;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42690);
        mpfr_init(r42691);
        mpfr_init(r42692);
        mpfr_init(r42693);
        mpfr_init(r42694);
        mpfr_init(r42695);
        mpfr_init(r42696);
        mpfr_init(r42697);
        mpfr_init(r42698);
        mpfr_init(r42699);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r42690, x, MPFR_RNDN);
        mpfr_set_d(r42691, y, MPFR_RNDN);
        mpfr_div(r42692, r42690, r42691, MPFR_RNDN);
        mpfr_set_d(r42693, z, MPFR_RNDN);
        mpfr_mul(r42694, r42692, r42693, MPFR_RNDN);
        mpfr_set_d(r42695, t, MPFR_RNDN);
        mpfr_neg(r42696, r42695, MPFR_RNDN);
        mpfr_mul(r42697, r42692, r42696, MPFR_RNDN);
        mpfr_add(r42698, r42694, r42697, MPFR_RNDN);
        mpfr_add(r42699, r42698, r42695, MPFR_RNDN);
        return mpfr_get_d(r42699, MPFR_RNDN);
}

static mpfr_t r42700, r42701, r42702, r42703, r42704, r42705, r42706, r42707, r42708, r42709;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r42700);
        mpfr_init(r42701);
        mpfr_init(r42702);
        mpfr_init(r42703);
        mpfr_init(r42704);
        mpfr_init(r42705);
        mpfr_init(r42706);
        mpfr_init(r42707);
        mpfr_init(r42708);
        mpfr_init(r42709);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r42700, x, MPFR_RNDN);
        mpfr_set_d(r42701, y, MPFR_RNDN);
        mpfr_div(r42702, r42700, r42701, MPFR_RNDN);
        mpfr_set_d(r42703, z, MPFR_RNDN);
        mpfr_mul(r42704, r42702, r42703, MPFR_RNDN);
        mpfr_set_d(r42705, t, MPFR_RNDN);
        mpfr_neg(r42706, r42705, MPFR_RNDN);
        mpfr_mul(r42707, r42702, r42706, MPFR_RNDN);
        mpfr_add(r42708, r42704, r42707, MPFR_RNDN);
        mpfr_add(r42709, r42708, r42705, MPFR_RNDN);
        return mpfr_get_d(r42709, MPFR_RNDN);
}

