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

char *name = "Logistic function from Lakshay Garg";

double f_if(float x, float __attribute__((unused)) y) {
        float r8502 = 2.0f;
        float r8503 = 1.0f;
        float r8504 = -2.0f;
        float r8505 = x;
        float r8506 = r8504 * r8505;
        float r8507 = exp(r8506);
        float r8508 = r8503 + r8507;
        float r8509 = r8502 / r8508;
        float r8510 = r8509 - r8503;
        return r8510;
}

double f_id(double x, double __attribute__((unused)) y) {
        double r8511 = 2.0;
        double r8512 = 1.0;
        double r8513 = -2.0;
        double r8514 = x;
        double r8515 = r8513 * r8514;
        double r8516 = exp(r8515);
        double r8517 = r8512 + r8516;
        double r8518 = r8511 / r8517;
        double r8519 = r8518 - r8512;
        return r8519;
}


double f_of(float x, float __attribute__((unused)) y) {
        float r8520 = 2.0f;
        float r8521 = 1.0f;
        float r8522 = -2.0f;
        float r8523 = x;
        float r8524 = r8522 * r8523;
        float r8525 = exp(r8524);
        float r8526 = r8521 + r8525;
        float r8527 = r8520 / r8526;
        float r8528 = r8527 - r8521;
        float r8529 = -5.547390397855705e-06f;
        bool r8530 = r8528 <= r8529;
        float r8531 = 4.302195547616164e-12f;
        bool r8532 = r8528 <= r8531;
        float r8533 = 0.13333333333333333f;
        float r8534 = 5.0f;
        float r8535 = pow(r8523, r8534);
        float r8536 = r8533 * r8535;
        float r8537 = r8536 + r8523;
        float r8538 = 3.0f;
        float r8539 = pow(r8523, r8538);
        float r8540 = 0.3333333333333333f;
        float r8541 = r8539 * r8540;
        float r8542 = r8537 - r8541;
        float r8543 = r8532 ? r8542 : r8528;
        float r8544 = r8530 ? r8528 : r8543;
        return r8544;
}

double f_od(double x, double __attribute__((unused)) y) {
        double r8545 = 2.0;
        double r8546 = 1.0;
        double r8547 = -2.0;
        double r8548 = x;
        double r8549 = r8547 * r8548;
        double r8550 = exp(r8549);
        double r8551 = r8546 + r8550;
        double r8552 = r8545 / r8551;
        double r8553 = r8552 - r8546;
        double r8554 = -5.547390397855705e-06;
        bool r8555 = r8553 <= r8554;
        double r8556 = 4.302195547616164e-12;
        bool r8557 = r8553 <= r8556;
        double r8558 = 0.13333333333333333;
        double r8559 = 5.0;
        double r8560 = pow(r8548, r8559);
        double r8561 = r8558 * r8560;
        double r8562 = r8561 + r8548;
        double r8563 = 3.0;
        double r8564 = pow(r8548, r8563);
        double r8565 = 0.3333333333333333;
        double r8566 = r8564 * r8565;
        double r8567 = r8562 - r8566;
        double r8568 = r8557 ? r8567 : r8553;
        double r8569 = r8555 ? r8553 : r8568;
        return r8569;
}

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 r8570, r8571, r8572, r8573, r8574, r8575, r8576, r8577, r8578;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8570, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8571, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8572, "-2", 10, MPFR_RNDN);
        mpfr_init(r8573);
        mpfr_init(r8574);
        mpfr_init(r8575);
        mpfr_init(r8576);
        mpfr_init(r8577);
        mpfr_init(r8578);
}

double f_im(double x, double __attribute__((unused)) y) {
        ;
        ;
        ;
        mpfr_set_d(r8573, x, MPFR_RNDN);
        mpfr_mul(r8574, r8572, r8573, MPFR_RNDN);
        mpfr_exp(r8575, r8574, MPFR_RNDN);
        mpfr_add(r8576, r8571, r8575, MPFR_RNDN);
        mpfr_div(r8577, r8570, r8576, MPFR_RNDN);
        mpfr_sub(r8578, r8577, r8571, MPFR_RNDN);
        return mpfr_get_d(r8578, MPFR_RNDN);
}

static mpfr_t r8579, r8580, r8581, r8582, r8583, r8584, r8585, r8586, r8587, r8588, r8589, r8590, r8591, r8592, r8593, r8594, r8595, r8596, r8597, r8598, r8599, r8600, r8601, r8602, r8603;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8579, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8580, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8581, "-2", 10, MPFR_RNDN);
        mpfr_init(r8582);
        mpfr_init(r8583);
        mpfr_init(r8584);
        mpfr_init(r8585);
        mpfr_init(r8586);
        mpfr_init(r8587);
        mpfr_init_set_str(r8588, "-5.547390397855705e-06", 10, MPFR_RNDN);
        mpfr_init(r8589);
        mpfr_init_set_str(r8590, "4.302195547616164e-12", 10, MPFR_RNDN);
        mpfr_init(r8591);
        mpfr_init_set_str(r8592, "2/15", 10, MPFR_RNDN);
        mpfr_init_set_str(r8593, "5", 10, MPFR_RNDN);
        mpfr_init(r8594);
        mpfr_init(r8595);
        mpfr_init(r8596);
        mpfr_init_set_str(r8597, "3", 10, MPFR_RNDN);
        mpfr_init(r8598);
        mpfr_init_set_str(r8599, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8600);
        mpfr_init(r8601);
        mpfr_init(r8602);
        mpfr_init(r8603);
}

double f_fm(double x, double __attribute__((unused)) y) {
        ;
        ;
        ;
        mpfr_set_d(r8582, x, MPFR_RNDN);
        mpfr_mul(r8583, r8581, r8582, MPFR_RNDN);
        mpfr_exp(r8584, r8583, MPFR_RNDN);
        mpfr_add(r8585, r8580, r8584, MPFR_RNDN);
        mpfr_div(r8586, r8579, r8585, MPFR_RNDN);
        mpfr_sub(r8587, r8586, r8580, MPFR_RNDN);
        ;
        mpfr_set_si(r8589, mpfr_cmp(r8587, r8588) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8591, mpfr_cmp(r8587, r8590) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8594, r8582, r8593, MPFR_RNDN);
        mpfr_mul(r8595, r8592, r8594, MPFR_RNDN);
        mpfr_add(r8596, r8595, r8582, MPFR_RNDN);
        ;
        mpfr_pow(r8598, r8582, r8597, MPFR_RNDN);
        ;
        mpfr_mul(r8600, r8598, r8599, MPFR_RNDN);
        mpfr_sub(r8601, r8596, r8600, MPFR_RNDN);
        if (mpfr_get_si(r8591, MPFR_RNDN)) { mpfr_set(r8602, r8601, MPFR_RNDN); } else { mpfr_set(r8602, r8587, MPFR_RNDN); };
        if (mpfr_get_si(r8589, MPFR_RNDN)) { mpfr_set(r8603, r8587, MPFR_RNDN); } else { mpfr_set(r8603, r8602, MPFR_RNDN); };
        return mpfr_get_d(r8603, MPFR_RNDN);
}

static mpfr_t r8604, r8605, r8606, r8607, r8608, r8609, r8610, r8611, r8612, r8613, r8614, r8615, r8616, r8617, r8618, r8619, r8620, r8621, r8622, r8623, r8624, r8625, r8626, r8627, r8628;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8604, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8605, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8606, "-2", 10, MPFR_RNDN);
        mpfr_init(r8607);
        mpfr_init(r8608);
        mpfr_init(r8609);
        mpfr_init(r8610);
        mpfr_init(r8611);
        mpfr_init(r8612);
        mpfr_init_set_str(r8613, "-5.547390397855705e-06", 10, MPFR_RNDN);
        mpfr_init(r8614);
        mpfr_init_set_str(r8615, "4.302195547616164e-12", 10, MPFR_RNDN);
        mpfr_init(r8616);
        mpfr_init_set_str(r8617, "2/15", 10, MPFR_RNDN);
        mpfr_init_set_str(r8618, "5", 10, MPFR_RNDN);
        mpfr_init(r8619);
        mpfr_init(r8620);
        mpfr_init(r8621);
        mpfr_init_set_str(r8622, "3", 10, MPFR_RNDN);
        mpfr_init(r8623);
        mpfr_init_set_str(r8624, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8625);
        mpfr_init(r8626);
        mpfr_init(r8627);
        mpfr_init(r8628);
}

double f_dm(double x, double __attribute__((unused)) y) {
        ;
        ;
        ;
        mpfr_set_d(r8607, x, MPFR_RNDN);
        mpfr_mul(r8608, r8606, r8607, MPFR_RNDN);
        mpfr_exp(r8609, r8608, MPFR_RNDN);
        mpfr_add(r8610, r8605, r8609, MPFR_RNDN);
        mpfr_div(r8611, r8604, r8610, MPFR_RNDN);
        mpfr_sub(r8612, r8611, r8605, MPFR_RNDN);
        ;
        mpfr_set_si(r8614, mpfr_cmp(r8612, r8613) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r8616, mpfr_cmp(r8612, r8615) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8619, r8607, r8618, MPFR_RNDN);
        mpfr_mul(r8620, r8617, r8619, MPFR_RNDN);
        mpfr_add(r8621, r8620, r8607, MPFR_RNDN);
        ;
        mpfr_pow(r8623, r8607, r8622, MPFR_RNDN);
        ;
        mpfr_mul(r8625, r8623, r8624, MPFR_RNDN);
        mpfr_sub(r8626, r8621, r8625, MPFR_RNDN);
        if (mpfr_get_si(r8616, MPFR_RNDN)) { mpfr_set(r8627, r8626, MPFR_RNDN); } else { mpfr_set(r8627, r8612, MPFR_RNDN); };
        if (mpfr_get_si(r8614, MPFR_RNDN)) { mpfr_set(r8628, r8612, MPFR_RNDN); } else { mpfr_set(r8628, r8627, MPFR_RNDN); };
        return mpfr_get_d(r8628, MPFR_RNDN);
}

