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

char *name = "SynthBasics:moogVCF from YampaSynth-0.2";

double f_if(float x, float y, float z, float t) {
        float r36474 = x;
        float r36475 = y;
        float r36476 = z;
        float r36477 = r36475 * r36476;
        float r36478 = t;
        float r36479 = r36478 / r36475;
        float r36480 = tanh(r36479);
        float r36481 = r36474 / r36475;
        float r36482 = tanh(r36481);
        float r36483 = r36480 - r36482;
        float r36484 = r36477 * r36483;
        float r36485 = r36474 + r36484;
        return r36485;
}

double f_id(double x, double y, double z, double t) {
        double r36486 = x;
        double r36487 = y;
        double r36488 = z;
        double r36489 = r36487 * r36488;
        double r36490 = t;
        double r36491 = r36490 / r36487;
        double r36492 = tanh(r36491);
        double r36493 = r36486 / r36487;
        double r36494 = tanh(r36493);
        double r36495 = r36492 - r36494;
        double r36496 = r36489 * r36495;
        double r36497 = r36486 + r36496;
        return r36497;
}


double f_of(float x, float y, float z, float t) {
        float r36498 = z;
        float r36499 = -3.62875581368641e-69f;
        bool r36500 = r36498 <= r36499;
        float r36501 = x;
        float r36502 = y;
        float r36503 = t;
        float r36504 = r36503 / r36502;
        float r36505 = tanh(r36504);
        float r36506 = r36501 / r36502;
        float r36507 = tanh(r36506);
        float r36508 = r36505 - r36507;
        float r36509 = r36498 * r36508;
        float r36510 = r36502 * r36509;
        float r36511 = r36501 + r36510;
        float r36512 = 8.213176982230116e-77f;
        bool r36513 = r36498 <= r36512;
        float r36514 = r36513 ? r36511 : r36511;
        float r36515 = r36500 ? r36511 : r36514;
        return r36515;
}

double f_od(double x, double y, double z, double t) {
        double r36516 = z;
        double r36517 = -3.62875581368641e-69;
        bool r36518 = r36516 <= r36517;
        double r36519 = x;
        double r36520 = y;
        double r36521 = t;
        double r36522 = r36521 / r36520;
        double r36523 = tanh(r36522);
        double r36524 = r36519 / r36520;
        double r36525 = tanh(r36524);
        double r36526 = r36523 - r36525;
        double r36527 = r36516 * r36526;
        double r36528 = r36520 * r36527;
        double r36529 = r36519 + r36528;
        double r36530 = 8.213176982230116e-77;
        bool r36531 = r36516 <= r36530;
        double r36532 = r36531 ? r36529 : r36529;
        double r36533 = r36518 ? r36529 : r36532;
        return r36533;
}

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 r36534, r36535, r36536, r36537, r36538, r36539, r36540, r36541, r36542, r36543, r36544, r36545;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r36534);
        mpfr_init(r36535);
        mpfr_init(r36536);
        mpfr_init(r36537);
        mpfr_init(r36538);
        mpfr_init(r36539);
        mpfr_init(r36540);
        mpfr_init(r36541);
        mpfr_init(r36542);
        mpfr_init(r36543);
        mpfr_init(r36544);
        mpfr_init(r36545);
}

double f_im(double x, double y, double z, double t) {
        mpfr_set_d(r36534, x, MPFR_RNDN);
        mpfr_set_d(r36535, y, MPFR_RNDN);
        mpfr_set_d(r36536, z, MPFR_RNDN);
        mpfr_mul(r36537, r36535, r36536, MPFR_RNDN);
        mpfr_set_d(r36538, t, MPFR_RNDN);
        mpfr_div(r36539, r36538, r36535, MPFR_RNDN);
        mpfr_tanh(r36540, r36539, MPFR_RNDN);
        mpfr_div(r36541, r36534, r36535, MPFR_RNDN);
        mpfr_tanh(r36542, r36541, MPFR_RNDN);
        mpfr_sub(r36543, r36540, r36542, MPFR_RNDN);
        mpfr_mul(r36544, r36537, r36543, MPFR_RNDN);
        mpfr_add(r36545, r36534, r36544, MPFR_RNDN);
        return mpfr_get_d(r36545, MPFR_RNDN);
}

static mpfr_t r36546, r36547, r36548, r36549, r36550, r36551, r36552, r36553, r36554, r36555, r36556, r36557, r36558, r36559, r36560, r36561, r36562, r36563;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36546);
        mpfr_init_set_str(r36547, "-3.62875581368641e-69", 10, MPFR_RNDN);
        mpfr_init(r36548);
        mpfr_init(r36549);
        mpfr_init(r36550);
        mpfr_init(r36551);
        mpfr_init(r36552);
        mpfr_init(r36553);
        mpfr_init(r36554);
        mpfr_init(r36555);
        mpfr_init(r36556);
        mpfr_init(r36557);
        mpfr_init(r36558);
        mpfr_init(r36559);
        mpfr_init_set_str(r36560, "8.213176982230116e-77", 10, MPFR_RNDN);
        mpfr_init(r36561);
        mpfr_init(r36562);
        mpfr_init(r36563);
}

double f_fm(double x, double y, double z, double t) {
        mpfr_set_d(r36546, z, MPFR_RNDN);
        ;
        mpfr_set_si(r36548, mpfr_cmp(r36546, r36547) <= 0, MPFR_RNDN);
        mpfr_set_d(r36549, x, MPFR_RNDN);
        mpfr_set_d(r36550, y, MPFR_RNDN);
        mpfr_set_d(r36551, t, MPFR_RNDN);
        mpfr_div(r36552, r36551, r36550, MPFR_RNDN);
        mpfr_tanh(r36553, r36552, MPFR_RNDN);
        mpfr_div(r36554, r36549, r36550, MPFR_RNDN);
        mpfr_tanh(r36555, r36554, MPFR_RNDN);
        mpfr_sub(r36556, r36553, r36555, MPFR_RNDN);
        mpfr_mul(r36557, r36546, r36556, MPFR_RNDN);
        mpfr_mul(r36558, r36550, r36557, MPFR_RNDN);
        mpfr_add(r36559, r36549, r36558, MPFR_RNDN);
        ;
        mpfr_set_si(r36561, mpfr_cmp(r36546, r36560) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r36561, MPFR_RNDN)) { mpfr_set(r36562, r36559, MPFR_RNDN); } else { mpfr_set(r36562, r36559, MPFR_RNDN); };
        if (mpfr_get_si(r36548, MPFR_RNDN)) { mpfr_set(r36563, r36559, MPFR_RNDN); } else { mpfr_set(r36563, r36562, MPFR_RNDN); };
        return mpfr_get_d(r36563, MPFR_RNDN);
}

static mpfr_t r36564, r36565, r36566, r36567, r36568, r36569, r36570, r36571, r36572, r36573, r36574, r36575, r36576, r36577, r36578, r36579, r36580, r36581;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r36564);
        mpfr_init_set_str(r36565, "-3.62875581368641e-69", 10, MPFR_RNDN);
        mpfr_init(r36566);
        mpfr_init(r36567);
        mpfr_init(r36568);
        mpfr_init(r36569);
        mpfr_init(r36570);
        mpfr_init(r36571);
        mpfr_init(r36572);
        mpfr_init(r36573);
        mpfr_init(r36574);
        mpfr_init(r36575);
        mpfr_init(r36576);
        mpfr_init(r36577);
        mpfr_init_set_str(r36578, "8.213176982230116e-77", 10, MPFR_RNDN);
        mpfr_init(r36579);
        mpfr_init(r36580);
        mpfr_init(r36581);
}

double f_dm(double x, double y, double z, double t) {
        mpfr_set_d(r36564, z, MPFR_RNDN);
        ;
        mpfr_set_si(r36566, mpfr_cmp(r36564, r36565) <= 0, MPFR_RNDN);
        mpfr_set_d(r36567, x, MPFR_RNDN);
        mpfr_set_d(r36568, y, MPFR_RNDN);
        mpfr_set_d(r36569, t, MPFR_RNDN);
        mpfr_div(r36570, r36569, r36568, MPFR_RNDN);
        mpfr_tanh(r36571, r36570, MPFR_RNDN);
        mpfr_div(r36572, r36567, r36568, MPFR_RNDN);
        mpfr_tanh(r36573, r36572, MPFR_RNDN);
        mpfr_sub(r36574, r36571, r36573, MPFR_RNDN);
        mpfr_mul(r36575, r36564, r36574, MPFR_RNDN);
        mpfr_mul(r36576, r36568, r36575, MPFR_RNDN);
        mpfr_add(r36577, r36567, r36576, MPFR_RNDN);
        ;
        mpfr_set_si(r36579, mpfr_cmp(r36564, r36578) <= 0, MPFR_RNDN);
        if (mpfr_get_si(r36579, MPFR_RNDN)) { mpfr_set(r36580, r36577, MPFR_RNDN); } else { mpfr_set(r36580, r36577, MPFR_RNDN); };
        if (mpfr_get_si(r36566, MPFR_RNDN)) { mpfr_set(r36581, r36577, MPFR_RNDN); } else { mpfr_set(r36581, r36580, MPFR_RNDN); };
        return mpfr_get_d(r36581, MPFR_RNDN);
}

