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

char *name = "NMSE Section 6.1 mentioned, A";

double f_if(float x, float eps) {
        float r8527 = 1;
        float r8528 = eps;
        float r8529 = r8527 / r8528;
        float r8530 = r8527 + r8529;
        float r8531 = r8527 - r8528;
        float r8532 = x;
        float r8533 = r8531 * r8532;
        float r8534 = -r8533;
        float r8535 = exp(r8534);
        float r8536 = r8530 * r8535;
        float r8537 = r8529 - r8527;
        float r8538 = r8527 + r8528;
        float r8539 = r8538 * r8532;
        float r8540 = -r8539;
        float r8541 = exp(r8540);
        float r8542 = r8537 * r8541;
        float r8543 = r8536 - r8542;
        float r8544 = 2;
        float r8545 = r8543 / r8544;
        return r8545;
}

double f_id(double x, double eps) {
        double r8546 = 1;
        double r8547 = eps;
        double r8548 = r8546 / r8547;
        double r8549 = r8546 + r8548;
        double r8550 = r8546 - r8547;
        double r8551 = x;
        double r8552 = r8550 * r8551;
        double r8553 = -r8552;
        double r8554 = exp(r8553);
        double r8555 = r8549 * r8554;
        double r8556 = r8548 - r8546;
        double r8557 = r8546 + r8547;
        double r8558 = r8557 * r8551;
        double r8559 = -r8558;
        double r8560 = exp(r8559);
        double r8561 = r8556 * r8560;
        double r8562 = r8555 - r8561;
        double r8563 = 2;
        double r8564 = r8562 / r8563;
        return r8564;
}


double f_of(float x, float eps) {
        float r8565 = 2/3;
        float r8566 = x;
        float r8567 = r8565 * r8566;
        float r8568 = r8566 * r8566;
        float r8569 = 2;
        float r8570 = r8569 - r8568;
        float r8571 = fma(r8567, r8568, r8570);
        float r8572 = cbrt(r8571);
        float r8573 = r8572 * r8572;
        float r8574 = r8569 / r8572;
        float r8575 = r8573 / r8574;
        float r8576 = 15776618.212610146;
        bool r8577 = r8575 <= r8576;
        float r8578 = r8568 * r8565;
        float r8579 = fma(r8578, r8566, r8570);
        float r8580 = r8579 / r8569;
        float r8581 = 1;
        float r8582 = eps;
        float r8583 = r8581 / r8582;
        float r8584 = r8581 + r8583;
        float r8585 = -r8566;
        float r8586 = r8581 - r8582;
        float r8587 = r8585 * r8586;
        float r8588 = exp(r8587);
        float r8589 = r8581 - r8583;
        float r8590 = fma(r8566, r8582, r8566);
        float r8591 = exp(r8590);
        float r8592 = r8589 / r8591;
        float r8593 = fma(r8584, r8588, r8592);
        float r8594 = r8593 / r8569;
        float r8595 = r8577 ? r8580 : r8594;
        return r8595;
}

double f_od(double x, double eps) {
        double r8596 = 2/3;
        double r8597 = x;
        double r8598 = r8596 * r8597;
        double r8599 = r8597 * r8597;
        double r8600 = 2;
        double r8601 = r8600 - r8599;
        double r8602 = fma(r8598, r8599, r8601);
        double r8603 = cbrt(r8602);
        double r8604 = r8603 * r8603;
        double r8605 = r8600 / r8603;
        double r8606 = r8604 / r8605;
        double r8607 = 15776618.212610146;
        bool r8608 = r8606 <= r8607;
        double r8609 = r8599 * r8596;
        double r8610 = fma(r8609, r8597, r8601);
        double r8611 = r8610 / r8600;
        double r8612 = 1;
        double r8613 = eps;
        double r8614 = r8612 / r8613;
        double r8615 = r8612 + r8614;
        double r8616 = -r8597;
        double r8617 = r8612 - r8613;
        double r8618 = r8616 * r8617;
        double r8619 = exp(r8618);
        double r8620 = r8612 - r8614;
        double r8621 = fma(r8597, r8613, r8597);
        double r8622 = exp(r8621);
        double r8623 = r8620 / r8622;
        double r8624 = fma(r8615, r8619, r8623);
        double r8625 = r8624 / r8600;
        double r8626 = r8608 ? r8611 : r8625;
        return r8626;
}

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 r8627, r8628, r8629, r8630, r8631, r8632, r8633, r8634, r8635, r8636, r8637, r8638, r8639, r8640, r8641, r8642, r8643, r8644, r8645;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8627, "1", 10, MPFR_RNDN);
        mpfr_init(r8628);
        mpfr_init(r8629);
        mpfr_init(r8630);
        mpfr_init(r8631);
        mpfr_init(r8632);
        mpfr_init(r8633);
        mpfr_init(r8634);
        mpfr_init(r8635);
        mpfr_init(r8636);
        mpfr_init(r8637);
        mpfr_init(r8638);
        mpfr_init(r8639);
        mpfr_init(r8640);
        mpfr_init(r8641);
        mpfr_init(r8642);
        mpfr_init(r8643);
        mpfr_init_set_str(r8644, "2", 10, MPFR_RNDN);
        mpfr_init(r8645);
}

double f_im(double x, double eps) {
        ;
        mpfr_set_d(r8628, eps, MPFR_RNDN);
        mpfr_div(r8629, r8627, r8628, MPFR_RNDN);
        mpfr_add(r8630, r8627, r8629, MPFR_RNDN);
        mpfr_sub(r8631, r8627, r8628, MPFR_RNDN);
        mpfr_set_d(r8632, x, MPFR_RNDN);
        mpfr_mul(r8633, r8631, r8632, MPFR_RNDN);
        mpfr_neg(r8634, r8633, MPFR_RNDN);
        mpfr_exp(r8635, r8634, MPFR_RNDN);
        mpfr_mul(r8636, r8630, r8635, MPFR_RNDN);
        mpfr_sub(r8637, r8629, r8627, MPFR_RNDN);
        mpfr_add(r8638, r8627, r8628, MPFR_RNDN);
        mpfr_mul(r8639, r8638, r8632, MPFR_RNDN);
        mpfr_neg(r8640, r8639, MPFR_RNDN);
        mpfr_exp(r8641, r8640, MPFR_RNDN);
        mpfr_mul(r8642, r8637, r8641, MPFR_RNDN);
        mpfr_sub(r8643, r8636, r8642, MPFR_RNDN);
        ;
        mpfr_div(r8645, r8643, r8644, MPFR_RNDN);
        return mpfr_get_d(r8645, MPFR_RNDN);
}

static mpfr_t r8646, r8647, r8648, r8649, r8650, r8651, r8652, r8653, r8654, r8655, r8656, r8657, r8658, r8659, r8660, r8661, r8662, r8663, r8664, r8665, r8666, r8667, r8668, r8669, r8670, r8671, r8672, r8673, r8674, r8675, r8676;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8646, "2/3", 10, MPFR_RNDN);
        mpfr_init(r8647);
        mpfr_init(r8648);
        mpfr_init(r8649);
        mpfr_init_set_str(r8650, "2", 10, MPFR_RNDN);
        mpfr_init(r8651);
        mpfr_init(r8652);
        mpfr_init(r8653);
        mpfr_init(r8654);
        mpfr_init(r8655);
        mpfr_init(r8656);
        mpfr_init_set_str(r8657, "15776618.212610146", 10, MPFR_RNDN);
        mpfr_init(r8658);
        mpfr_init(r8659);
        mpfr_init(r8660);
        mpfr_init(r8661);
        mpfr_init_set_str(r8662, "1", 10, MPFR_RNDN);
        mpfr_init(r8663);
        mpfr_init(r8664);
        mpfr_init(r8665);
        mpfr_init(r8666);
        mpfr_init(r8667);
        mpfr_init(r8668);
        mpfr_init(r8669);
        mpfr_init(r8670);
        mpfr_init(r8671);
        mpfr_init(r8672);
        mpfr_init(r8673);
        mpfr_init(r8674);
        mpfr_init(r8675);
        mpfr_init(r8676);
}

double f_fm(double x, double eps) {
        ;
        mpfr_set_d(r8647, x, MPFR_RNDN);
        mpfr_mul(r8648, r8646, r8647, MPFR_RNDN);
        mpfr_mul(r8649, r8647, r8647, MPFR_RNDN);
        ;
        mpfr_sub(r8651, r8650, r8649, MPFR_RNDN);
        mpfr_fma(r8652, r8648, r8649, r8651, MPFR_RNDN);
        mpfr_cbrt(r8653, r8652, MPFR_RNDN);
        mpfr_mul(r8654, r8653, r8653, MPFR_RNDN);
        mpfr_div(r8655, r8650, r8653, MPFR_RNDN);
        mpfr_div(r8656, r8654, r8655, MPFR_RNDN);
        ;
        mpfr_set_si(r8658, mpfr_cmp(r8656, r8657) <= 0, MPFR_RNDN);
        mpfr_mul(r8659, r8649, r8646, MPFR_RNDN);
        mpfr_fma(r8660, r8659, r8647, r8651, MPFR_RNDN);
        mpfr_div(r8661, r8660, r8650, MPFR_RNDN);
        ;
        mpfr_set_d(r8663, eps, MPFR_RNDN);
        mpfr_div(r8664, r8662, r8663, MPFR_RNDN);
        mpfr_add(r8665, r8662, r8664, MPFR_RNDN);
        mpfr_neg(r8666, r8647, MPFR_RNDN);
        mpfr_sub(r8667, r8662, r8663, MPFR_RNDN);
        mpfr_mul(r8668, r8666, r8667, MPFR_RNDN);
        mpfr_exp(r8669, r8668, MPFR_RNDN);
        mpfr_sub(r8670, r8662, r8664, MPFR_RNDN);
        mpfr_fma(r8671, r8647, r8663, r8647, MPFR_RNDN);
        mpfr_exp(r8672, r8671, MPFR_RNDN);
        mpfr_div(r8673, r8670, r8672, MPFR_RNDN);
        mpfr_fma(r8674, r8665, r8669, r8673, MPFR_RNDN);
        mpfr_div(r8675, r8674, r8650, MPFR_RNDN);
        if (mpfr_get_si(r8658, MPFR_RNDN)) { mpfr_set(r8676, r8661, MPFR_RNDN); } else { mpfr_set(r8676, r8675, MPFR_RNDN); };
        return mpfr_get_d(r8676, MPFR_RNDN);
}

static mpfr_t r8677, r8678, r8679, r8680, r8681, r8682, r8683, r8684, r8685, r8686, r8687, r8688, r8689, r8690, r8691, r8692, r8693, r8694, r8695, r8696, r8697, r8698, r8699, r8700, r8701, r8702, r8703, r8704, r8705, r8706, r8707;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r8677, "2/3", 10, MPFR_RNDN);
        mpfr_init(r8678);
        mpfr_init(r8679);
        mpfr_init(r8680);
        mpfr_init_set_str(r8681, "2", 10, MPFR_RNDN);
        mpfr_init(r8682);
        mpfr_init(r8683);
        mpfr_init(r8684);
        mpfr_init(r8685);
        mpfr_init(r8686);
        mpfr_init(r8687);
        mpfr_init_set_str(r8688, "15776618.212610146", 10, MPFR_RNDN);
        mpfr_init(r8689);
        mpfr_init(r8690);
        mpfr_init(r8691);
        mpfr_init(r8692);
        mpfr_init_set_str(r8693, "1", 10, MPFR_RNDN);
        mpfr_init(r8694);
        mpfr_init(r8695);
        mpfr_init(r8696);
        mpfr_init(r8697);
        mpfr_init(r8698);
        mpfr_init(r8699);
        mpfr_init(r8700);
        mpfr_init(r8701);
        mpfr_init(r8702);
        mpfr_init(r8703);
        mpfr_init(r8704);
        mpfr_init(r8705);
        mpfr_init(r8706);
        mpfr_init(r8707);
}

double f_dm(double x, double eps) {
        ;
        mpfr_set_d(r8678, x, MPFR_RNDN);
        mpfr_mul(r8679, r8677, r8678, MPFR_RNDN);
        mpfr_mul(r8680, r8678, r8678, MPFR_RNDN);
        ;
        mpfr_sub(r8682, r8681, r8680, MPFR_RNDN);
        mpfr_fma(r8683, r8679, r8680, r8682, MPFR_RNDN);
        mpfr_cbrt(r8684, r8683, MPFR_RNDN);
        mpfr_mul(r8685, r8684, r8684, MPFR_RNDN);
        mpfr_div(r8686, r8681, r8684, MPFR_RNDN);
        mpfr_div(r8687, r8685, r8686, MPFR_RNDN);
        ;
        mpfr_set_si(r8689, mpfr_cmp(r8687, r8688) <= 0, MPFR_RNDN);
        mpfr_mul(r8690, r8680, r8677, MPFR_RNDN);
        mpfr_fma(r8691, r8690, r8678, r8682, MPFR_RNDN);
        mpfr_div(r8692, r8691, r8681, MPFR_RNDN);
        ;
        mpfr_set_d(r8694, eps, MPFR_RNDN);
        mpfr_div(r8695, r8693, r8694, MPFR_RNDN);
        mpfr_add(r8696, r8693, r8695, MPFR_RNDN);
        mpfr_neg(r8697, r8678, MPFR_RNDN);
        mpfr_sub(r8698, r8693, r8694, MPFR_RNDN);
        mpfr_mul(r8699, r8697, r8698, MPFR_RNDN);
        mpfr_exp(r8700, r8699, MPFR_RNDN);
        mpfr_sub(r8701, r8693, r8695, MPFR_RNDN);
        mpfr_fma(r8702, r8678, r8694, r8678, MPFR_RNDN);
        mpfr_exp(r8703, r8702, MPFR_RNDN);
        mpfr_div(r8704, r8701, r8703, MPFR_RNDN);
        mpfr_fma(r8705, r8696, r8700, r8704, MPFR_RNDN);
        mpfr_div(r8706, r8705, r8681, MPFR_RNDN);
        if (mpfr_get_si(r8689, MPFR_RNDN)) { mpfr_set(r8707, r8692, MPFR_RNDN); } else { mpfr_set(r8707, r8706, MPFR_RNDN); };
        return mpfr_get_d(r8707, MPFR_RNDN);
}

