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

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

double f_if(float x, float y, float z, float t) {
        float r45809 = x;
        float r45810 = y;
        float r45811 = r45809 - r45810;
        float r45812 = z;
        float r45813 = r45812 - r45810;
        float r45814 = r45811 / r45813;
        float r45815 = t;
        float r45816 = r45814 * r45815;
        return r45816;
}

double f_id(double x, double y, double z, double t) {
        double r45817 = x;
        double r45818 = y;
        double r45819 = r45817 - r45818;
        double r45820 = z;
        double r45821 = r45820 - r45818;
        double r45822 = r45819 / r45821;
        double r45823 = t;
        double r45824 = r45822 * r45823;
        return r45824;
}


double f_of(float x, float y, float z, float t) {
        float r45825 = x;
        float r45826 = y;
        float r45827 = r45825 - r45826;
        float r45828 = z;
        float r45829 = r45828 - r45826;
        float r45830 = r45827 / r45829;
        float r45831 = t;
        float r45832 = r45830 * r45831;
        float r45833 = -9.854125768905e-316;
        bool r45834 = r45832 <= r45833;
        float r45835 = -0.0;
        bool r45836 = r45832 <= r45835;
        float r45837 = r45831 / r45829;
        float r45838 = r45827 * r45837;
        float r45839 = r45836 ? r45838 : r45832;
        float r45840 = r45834 ? r45832 : r45839;
        return r45840;
}

double f_od(double x, double y, double z, double t) {
        double r45841 = x;
        double r45842 = y;
        double r45843 = r45841 - r45842;
        double r45844 = z;
        double r45845 = r45844 - r45842;
        double r45846 = r45843 / r45845;
        double r45847 = t;
        double r45848 = r45846 * r45847;
        double r45849 = -9.854125768905e-316;
        bool r45850 = r45848 <= r45849;
        double r45851 = -0.0;
        bool r45852 = r45848 <= r45851;
        double r45853 = r45847 / r45845;
        double r45854 = r45843 * r45853;
        double r45855 = r45852 ? r45854 : r45848;
        double r45856 = r45850 ? r45848 : r45855;
        return r45856;
}

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 r45857, r45858, r45859, r45860, r45861, r45862, r45863, r45864;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r45857);
        mpfr_init(r45858);
        mpfr_init(r45859);
        mpfr_init(r45860);
        mpfr_init(r45861);
        mpfr_init(r45862);
        mpfr_init(r45863);
        mpfr_init(r45864);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r45857, x, MPFR_RNDN);
        mpfr_set_d(r45858, y, MPFR_RNDN);
        mpfr_sub(r45859, r45857, r45858, MPFR_RNDN);
        mpfr_set_d(r45860, z, MPFR_RNDN);
        mpfr_sub(r45861, r45860, r45858, MPFR_RNDN);
        mpfr_div(r45862, r45859, r45861, MPFR_RNDN);
        mpfr_set_d(r45863, t, MPFR_RNDN);
        mpfr_mul(r45864, r45862, r45863, MPFR_RNDN);
        return mpfr_get_d(r45864, MPFR_RNDN);
}

static mpfr_t r45865, r45866, r45867, r45868, r45869, r45870, r45871, r45872, r45873, r45874, r45875, r45876, r45877, r45878, r45879, r45880;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45865);
        mpfr_init(r45866);
        mpfr_init(r45867);
        mpfr_init(r45868);
        mpfr_init(r45869);
        mpfr_init(r45870);
        mpfr_init(r45871);
        mpfr_init(r45872);
        mpfr_init_set_str(r45873, "-9.854125768905e-316", 10, MPFR_RNDN);
        mpfr_init(r45874);
        mpfr_init_set_str(r45875, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r45876);
        mpfr_init(r45877);
        mpfr_init(r45878);
        mpfr_init(r45879);
        mpfr_init(r45880);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r45865, x, MPFR_RNDN);
        mpfr_set_d(r45866, y, MPFR_RNDN);
        mpfr_sub(r45867, r45865, r45866, MPFR_RNDN);
        mpfr_set_d(r45868, z, MPFR_RNDN);
        mpfr_sub(r45869, r45868, r45866, MPFR_RNDN);
        mpfr_div(r45870, r45867, r45869, MPFR_RNDN);
        mpfr_set_d(r45871, t, MPFR_RNDN);
        mpfr_mul(r45872, r45870, r45871, MPFR_RNDN);
        ;
        mpfr_set_si(r45874, mpfr_cmp(r45872, r45873) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r45876, mpfr_cmp(r45872, r45875) <= 0, MPFR_RNDN);
        mpfr_div(r45877, r45871, r45869, MPFR_RNDN);
        mpfr_mul(r45878, r45867, r45877, MPFR_RNDN);
        if (mpfr_get_si(r45876, MPFR_RNDN)) { mpfr_set(r45879, r45878, MPFR_RNDN); } else { mpfr_set(r45879, r45872, MPFR_RNDN); };
        if (mpfr_get_si(r45874, MPFR_RNDN)) { mpfr_set(r45880, r45872, MPFR_RNDN); } else { mpfr_set(r45880, r45879, MPFR_RNDN); };
        return mpfr_get_d(r45880, MPFR_RNDN);
}

static mpfr_t r45881, r45882, r45883, r45884, r45885, r45886, r45887, r45888, r45889, r45890, r45891, r45892, r45893, r45894, r45895, r45896;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r45881);
        mpfr_init(r45882);
        mpfr_init(r45883);
        mpfr_init(r45884);
        mpfr_init(r45885);
        mpfr_init(r45886);
        mpfr_init(r45887);
        mpfr_init(r45888);
        mpfr_init_set_str(r45889, "-9.854125768905e-316", 10, MPFR_RNDN);
        mpfr_init(r45890);
        mpfr_init_set_str(r45891, "-0.0", 10, MPFR_RNDN);
        mpfr_init(r45892);
        mpfr_init(r45893);
        mpfr_init(r45894);
        mpfr_init(r45895);
        mpfr_init(r45896);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r45881, x, MPFR_RNDN);
        mpfr_set_d(r45882, y, MPFR_RNDN);
        mpfr_sub(r45883, r45881, r45882, MPFR_RNDN);
        mpfr_set_d(r45884, z, MPFR_RNDN);
        mpfr_sub(r45885, r45884, r45882, MPFR_RNDN);
        mpfr_div(r45886, r45883, r45885, MPFR_RNDN);
        mpfr_set_d(r45887, t, MPFR_RNDN);
        mpfr_mul(r45888, r45886, r45887, MPFR_RNDN);
        ;
        mpfr_set_si(r45890, mpfr_cmp(r45888, r45889) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r45892, mpfr_cmp(r45888, r45891) <= 0, MPFR_RNDN);
        mpfr_div(r45893, r45887, r45885, MPFR_RNDN);
        mpfr_mul(r45894, r45883, r45893, MPFR_RNDN);
        if (mpfr_get_si(r45892, MPFR_RNDN)) { mpfr_set(r45895, r45894, MPFR_RNDN); } else { mpfr_set(r45895, r45888, MPFR_RNDN); };
        if (mpfr_get_si(r45890, MPFR_RNDN)) { mpfr_set(r45896, r45888, MPFR_RNDN); } else { mpfr_set(r45896, r45895, MPFR_RNDN); };
        return mpfr_get_d(r45896, MPFR_RNDN);
}

