#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 r8420 = 2.0f;
        float r8421 = 1.0f;
        float r8422 = -2.0f;
        float r8423 = x;
        float r8424 = r8422 * r8423;
        float r8425 = exp(r8424);
        float r8426 = r8421 + r8425;
        float r8427 = r8420 / r8426;
        float r8428 = r8427 - r8421;
        return r8428;
}

double f_id(double x, double __attribute__((unused)) y) {
        double r8429 = 2.0;
        double r8430 = 1.0;
        double r8431 = -2.0;
        double r8432 = x;
        double r8433 = r8431 * r8432;
        double r8434 = exp(r8433);
        double r8435 = r8430 + r8434;
        double r8436 = r8429 / r8435;
        double r8437 = r8436 - r8430;
        return r8437;
}


double f_of(float x, float __attribute__((unused)) y) {
        float r8438 = 2.0f;
        float r8439 = 1.0f;
        float r8440 = -2.0f;
        float r8441 = x;
        float r8442 = r8440 * r8441;
        float r8443 = exp(r8442);
        float r8444 = r8439 + r8443;
        float r8445 = r8438 / r8444;
        float r8446 = r8445 - r8439;
        float r8447 = -1.0851674992178994e-07f;
        bool r8448 = r8446 <= r8447;
        float r8449 = log1p(r8444);
        float r8450 = expm1(r8449);
        float r8451 = r8438 / r8450;
        float r8452 = r8451 - r8439;
        float r8453 = 5.9324951686377854e-08f;
        bool r8454 = r8446 <= r8453;
        float r8455 = 0.13333333333333333f;
        float r8456 = 5.0f;
        float r8457 = pow(r8441, r8456);
        float r8458 = r8455 * r8457;
        float r8459 = r8458 + r8441;
        float r8460 = 3.0f;
        float r8461 = pow(r8441, r8460);
        float r8462 = 0.3333333333333333f;
        float r8463 = r8461 * r8462;
        float r8464 = r8459 - r8463;
        float r8465 = r8454 ? r8464 : r8452;
        float r8466 = r8448 ? r8452 : r8465;
        return r8466;
}

double f_od(double x, double __attribute__((unused)) y) {
        double r8467 = 2.0;
        double r8468 = 1.0;
        double r8469 = -2.0;
        double r8470 = x;
        double r8471 = r8469 * r8470;
        double r8472 = exp(r8471);
        double r8473 = r8468 + r8472;
        double r8474 = r8467 / r8473;
        double r8475 = r8474 - r8468;
        double r8476 = -1.0851674992178994e-07;
        bool r8477 = r8475 <= r8476;
        double r8478 = log1p(r8473);
        double r8479 = expm1(r8478);
        double r8480 = r8467 / r8479;
        double r8481 = r8480 - r8468;
        double r8482 = 5.9324951686377854e-08;
        bool r8483 = r8475 <= r8482;
        double r8484 = 0.13333333333333333;
        double r8485 = 5.0;
        double r8486 = pow(r8470, r8485);
        double r8487 = r8484 * r8486;
        double r8488 = r8487 + r8470;
        double r8489 = 3.0;
        double r8490 = pow(r8470, r8489);
        double r8491 = 0.3333333333333333;
        double r8492 = r8490 * r8491;
        double r8493 = r8488 - r8492;
        double r8494 = r8483 ? r8493 : r8481;
        double r8495 = r8477 ? r8481 : r8494;
        return r8495;
}

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 r8496, r8497, r8498, r8499, r8500, r8501, r8502, r8503, r8504;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8496, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8497, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8498, "-2", 10, MPFR_RNDN);
        mpfr_init(r8499);
        mpfr_init(r8500);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
}

double f_im(double x, double __attribute__((unused)) y) {
        ;
        ;
        ;
        mpfr_set_d(r8499, x, MPFR_RNDN);
        mpfr_mul(r8500, r8498, r8499, MPFR_RNDN);
        mpfr_exp(r8501, r8500, MPFR_RNDN);
        mpfr_add(r8502, r8497, r8501, MPFR_RNDN);
        mpfr_div(r8503, r8496, r8502, MPFR_RNDN);
        mpfr_sub(r8504, r8503, r8497, MPFR_RNDN);
        return mpfr_get_d(r8504, MPFR_RNDN);
}

static mpfr_t r8505, r8506, r8507, r8508, r8509, r8510, r8511, r8512, r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521, r8522, r8523, r8524, r8525, r8526, r8527, r8528, r8529, r8530, r8531, r8532, r8533;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8505, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8506, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8507, "-2", 10, MPFR_RNDN);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init(r8511);
        mpfr_init(r8512);
        mpfr_init(r8513);
        mpfr_init_set_str(r8514, "-1.0851674992178994e-07", 10, MPFR_RNDN);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init_set_str(r8520, "5.9324951686377854e-08", 10, MPFR_RNDN);
        mpfr_init(r8521);
        mpfr_init_set_str(r8522, "2/15", 10, MPFR_RNDN);
        mpfr_init_set_str(r8523, "5", 10, MPFR_RNDN);
        mpfr_init(r8524);
        mpfr_init(r8525);
        mpfr_init(r8526);
        mpfr_init_set_str(r8527, "3", 10, MPFR_RNDN);
        mpfr_init(r8528);
        mpfr_init_set_str(r8529, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8530);
        mpfr_init(r8531);
        mpfr_init(r8532);
        mpfr_init(r8533);
}

double f_fm(double x, double __attribute__((unused)) y) {
        ;
        ;
        ;
        mpfr_set_d(r8508, x, MPFR_RNDN);
        mpfr_mul(r8509, r8507, r8508, MPFR_RNDN);
        mpfr_exp(r8510, r8509, MPFR_RNDN);
        mpfr_add(r8511, r8506, r8510, MPFR_RNDN);
        mpfr_div(r8512, r8505, r8511, MPFR_RNDN);
        mpfr_sub(r8513, r8512, r8506, MPFR_RNDN);
        ;
        mpfr_set_si(r8515, mpfr_cmp(r8513, r8514) <= 0, MPFR_RNDN);
        mpfr_log1p(r8516, r8511, MPFR_RNDN);
        mpfr_expm1(r8517, r8516, MPFR_RNDN);
        mpfr_div(r8518, r8505, r8517, MPFR_RNDN);
        mpfr_sub(r8519, r8518, r8506, MPFR_RNDN);
        ;
        mpfr_set_si(r8521, mpfr_cmp(r8513, r8520) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8524, r8508, r8523, MPFR_RNDN);
        mpfr_mul(r8525, r8522, r8524, MPFR_RNDN);
        mpfr_add(r8526, r8525, r8508, MPFR_RNDN);
        ;
        mpfr_pow(r8528, r8508, r8527, MPFR_RNDN);
        ;
        mpfr_mul(r8530, r8528, r8529, MPFR_RNDN);
        mpfr_sub(r8531, r8526, r8530, MPFR_RNDN);
        if (mpfr_get_si(r8521, MPFR_RNDN)) { mpfr_set(r8532, r8531, MPFR_RNDN); } else { mpfr_set(r8532, r8519, MPFR_RNDN); };
        if (mpfr_get_si(r8515, MPFR_RNDN)) { mpfr_set(r8533, r8519, MPFR_RNDN); } else { mpfr_set(r8533, r8532, MPFR_RNDN); };
        return mpfr_get_d(r8533, MPFR_RNDN);
}

static mpfr_t r8534, r8535, r8536, r8537, r8538, r8539, r8540, r8541, r8542, r8543, r8544, r8545, r8546, r8547, r8548, r8549, r8550, r8551, r8552, r8553, r8554, r8555, r8556, r8557, r8558, r8559, r8560, r8561, r8562;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8534, "2", 10, MPFR_RNDN);
        mpfr_init_set_str(r8535, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r8536, "-2", 10, MPFR_RNDN);
        mpfr_init(r8537);
        mpfr_init(r8538);
        mpfr_init(r8539);
        mpfr_init(r8540);
        mpfr_init(r8541);
        mpfr_init(r8542);
        mpfr_init_set_str(r8543, "-1.0851674992178994e-07", 10, MPFR_RNDN);
        mpfr_init(r8544);
        mpfr_init(r8545);
        mpfr_init(r8546);
        mpfr_init(r8547);
        mpfr_init(r8548);
        mpfr_init_set_str(r8549, "5.9324951686377854e-08", 10, MPFR_RNDN);
        mpfr_init(r8550);
        mpfr_init_set_str(r8551, "2/15", 10, MPFR_RNDN);
        mpfr_init_set_str(r8552, "5", 10, MPFR_RNDN);
        mpfr_init(r8553);
        mpfr_init(r8554);
        mpfr_init(r8555);
        mpfr_init_set_str(r8556, "3", 10, MPFR_RNDN);
        mpfr_init(r8557);
        mpfr_init_set_str(r8558, "1/3", 10, MPFR_RNDN);
        mpfr_init(r8559);
        mpfr_init(r8560);
        mpfr_init(r8561);
        mpfr_init(r8562);
}

double f_dm(double x, double __attribute__((unused)) y) {
        ;
        ;
        ;
        mpfr_set_d(r8537, x, MPFR_RNDN);
        mpfr_mul(r8538, r8536, r8537, MPFR_RNDN);
        mpfr_exp(r8539, r8538, MPFR_RNDN);
        mpfr_add(r8540, r8535, r8539, MPFR_RNDN);
        mpfr_div(r8541, r8534, r8540, MPFR_RNDN);
        mpfr_sub(r8542, r8541, r8535, MPFR_RNDN);
        ;
        mpfr_set_si(r8544, mpfr_cmp(r8542, r8543) <= 0, MPFR_RNDN);
        mpfr_log1p(r8545, r8540, MPFR_RNDN);
        mpfr_expm1(r8546, r8545, MPFR_RNDN);
        mpfr_div(r8547, r8534, r8546, MPFR_RNDN);
        mpfr_sub(r8548, r8547, r8535, MPFR_RNDN);
        ;
        mpfr_set_si(r8550, mpfr_cmp(r8542, r8549) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r8553, r8537, r8552, MPFR_RNDN);
        mpfr_mul(r8554, r8551, r8553, MPFR_RNDN);
        mpfr_add(r8555, r8554, r8537, MPFR_RNDN);
        ;
        mpfr_pow(r8557, r8537, r8556, MPFR_RNDN);
        ;
        mpfr_mul(r8559, r8557, r8558, MPFR_RNDN);
        mpfr_sub(r8560, r8555, r8559, MPFR_RNDN);
        if (mpfr_get_si(r8550, MPFR_RNDN)) { mpfr_set(r8561, r8560, MPFR_RNDN); } else { mpfr_set(r8561, r8548, MPFR_RNDN); };
        if (mpfr_get_si(r8544, MPFR_RNDN)) { mpfr_set(r8562, r8548, MPFR_RNDN); } else { mpfr_set(r8562, r8561, MPFR_RNDN); };
        return mpfr_get_d(r8562, MPFR_RNDN);
}

