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

char *name = "NMSE example 3.9";

double f_if(float x) {
        float r28552 = 1;
        float r28553 = x;
        float r28554 = r28552 / r28553;
        float r28555 = tan(r28553);
        float r28556 = r28552 / r28555;
        float r28557 = r28554 - r28556;
        return r28557;
}

double f_id(double x) {
        double r28558 = 1;
        double r28559 = x;
        double r28560 = r28558 / r28559;
        double r28561 = tan(r28559);
        double r28562 = r28558 / r28561;
        double r28563 = r28560 - r28562;
        return r28563;
}


double f_of(float x) {
        float r28564 = 1;
        float r28565 = x;
        float r28566 = r28564 / r28565;
        float r28567 = tan(r28565);
        float r28568 = r28564 / r28567;
        float r28569 = r28566 - r28568;
        float r28570 = -0.0005430901480872134;
        bool r28571 = r28569 <= r28570;
        float r28572 = 0.0;
        bool r28573 = r28569 <= r28572;
        float r28574 = 1/45;
        float r28575 = 3;
        float r28576 = pow(r28565, r28575);
        float r28577 = r28574 * r28576;
        float r28578 = 2/945;
        float r28579 = 5;
        float r28580 = pow(r28565, r28579);
        float r28581 = r28578 * r28580;
        float r28582 = 1/3;
        float r28583 = r28582 * r28565;
        float r28584 = r28581 + r28583;
        float r28585 = r28577 + r28584;
        float r28586 = r28573 ? r28585 : r28569;
        float r28587 = r28571 ? r28569 : r28586;
        return r28587;
}

double f_od(double x) {
        double r28588 = 1;
        double r28589 = x;
        double r28590 = r28588 / r28589;
        double r28591 = tan(r28589);
        double r28592 = r28588 / r28591;
        double r28593 = r28590 - r28592;
        double r28594 = -0.0005430901480872134;
        bool r28595 = r28593 <= r28594;
        double r28596 = 0.0;
        bool r28597 = r28593 <= r28596;
        double r28598 = 1/45;
        double r28599 = 3;
        double r28600 = pow(r28589, r28599);
        double r28601 = r28598 * r28600;
        double r28602 = 2/945;
        double r28603 = 5;
        double r28604 = pow(r28589, r28603);
        double r28605 = r28602 * r28604;
        double r28606 = 1/3;
        double r28607 = r28606 * r28589;
        double r28608 = r28605 + r28607;
        double r28609 = r28601 + r28608;
        double r28610 = r28597 ? r28609 : r28593;
        double r28611 = r28595 ? r28593 : r28610;
        return r28611;
}

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 r28612, r28613, r28614, r28615, r28616, r28617;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r28612, "1", 10, MPFR_RNDN);
        mpfr_init(r28613);
        mpfr_init(r28614);
        mpfr_init(r28615);
        mpfr_init(r28616);
        mpfr_init(r28617);
}

double f_im(double x) {
        ;
        mpfr_set_d(r28613, x, MPFR_RNDN);
        mpfr_div(r28614, r28612, r28613, MPFR_RNDN);
        mpfr_tan(r28615, r28613, MPFR_RNDN);
        mpfr_div(r28616, r28612, r28615, MPFR_RNDN);
        mpfr_sub(r28617, r28614, r28616, MPFR_RNDN);
        return mpfr_get_d(r28617, MPFR_RNDN);
}

static mpfr_t r28618, r28619, r28620, r28621, r28622, r28623, r28624, r28625, r28626, r28627, r28628, r28629, r28630, r28631, r28632, r28633, r28634, r28635, r28636, r28637, r28638, r28639, r28640, r28641;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r28618, "1", 10, MPFR_RNDN);
        mpfr_init(r28619);
        mpfr_init(r28620);
        mpfr_init(r28621);
        mpfr_init(r28622);
        mpfr_init(r28623);
        mpfr_init_set_str(r28624, "-0.0005430901480872134", 10, MPFR_RNDN);
        mpfr_init(r28625);
        mpfr_init_set_str(r28626, "0.0", 10, MPFR_RNDN);
        mpfr_init(r28627);
        mpfr_init_set_str(r28628, "1/45", 10, MPFR_RNDN);
        mpfr_init_set_str(r28629, "3", 10, MPFR_RNDN);
        mpfr_init(r28630);
        mpfr_init(r28631);
        mpfr_init_set_str(r28632, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r28633, "5", 10, MPFR_RNDN);
        mpfr_init(r28634);
        mpfr_init(r28635);
        mpfr_init_set_str(r28636, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28637);
        mpfr_init(r28638);
        mpfr_init(r28639);
        mpfr_init(r28640);
        mpfr_init(r28641);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r28619, x, MPFR_RNDN);
        mpfr_div(r28620, r28618, r28619, MPFR_RNDN);
        mpfr_tan(r28621, r28619, MPFR_RNDN);
        mpfr_div(r28622, r28618, r28621, MPFR_RNDN);
        mpfr_sub(r28623, r28620, r28622, MPFR_RNDN);
        ;
        mpfr_set_si(r28625, mpfr_cmp(r28623, r28624) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r28627, mpfr_cmp(r28623, r28626) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28630, r28619, r28629, MPFR_RNDN);
        mpfr_mul(r28631, r28628, r28630, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28634, r28619, r28633, MPFR_RNDN);
        mpfr_mul(r28635, r28632, r28634, MPFR_RNDN);
        ;
        mpfr_mul(r28637, r28636, r28619, MPFR_RNDN);
        mpfr_add(r28638, r28635, r28637, MPFR_RNDN);
        mpfr_add(r28639, r28631, r28638, MPFR_RNDN);
        if (mpfr_get_si(r28627, MPFR_RNDN)) { mpfr_set(r28640, r28639, MPFR_RNDN); } else { mpfr_set(r28640, r28623, MPFR_RNDN); };
        if (mpfr_get_si(r28625, MPFR_RNDN)) { mpfr_set(r28641, r28623, MPFR_RNDN); } else { mpfr_set(r28641, r28640, MPFR_RNDN); };
        return mpfr_get_d(r28641, MPFR_RNDN);
}

static mpfr_t r28642, r28643, r28644, r28645, r28646, r28647, r28648, r28649, r28650, r28651, r28652, r28653, r28654, r28655, r28656, r28657, r28658, r28659, r28660, r28661, r28662, r28663, r28664, r28665;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r28642, "1", 10, MPFR_RNDN);
        mpfr_init(r28643);
        mpfr_init(r28644);
        mpfr_init(r28645);
        mpfr_init(r28646);
        mpfr_init(r28647);
        mpfr_init_set_str(r28648, "-0.0005430901480872134", 10, MPFR_RNDN);
        mpfr_init(r28649);
        mpfr_init_set_str(r28650, "0.0", 10, MPFR_RNDN);
        mpfr_init(r28651);
        mpfr_init_set_str(r28652, "1/45", 10, MPFR_RNDN);
        mpfr_init_set_str(r28653, "3", 10, MPFR_RNDN);
        mpfr_init(r28654);
        mpfr_init(r28655);
        mpfr_init_set_str(r28656, "2/945", 10, MPFR_RNDN);
        mpfr_init_set_str(r28657, "5", 10, MPFR_RNDN);
        mpfr_init(r28658);
        mpfr_init(r28659);
        mpfr_init_set_str(r28660, "1/3", 10, MPFR_RNDN);
        mpfr_init(r28661);
        mpfr_init(r28662);
        mpfr_init(r28663);
        mpfr_init(r28664);
        mpfr_init(r28665);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r28643, x, MPFR_RNDN);
        mpfr_div(r28644, r28642, r28643, MPFR_RNDN);
        mpfr_tan(r28645, r28643, MPFR_RNDN);
        mpfr_div(r28646, r28642, r28645, MPFR_RNDN);
        mpfr_sub(r28647, r28644, r28646, MPFR_RNDN);
        ;
        mpfr_set_si(r28649, mpfr_cmp(r28647, r28648) <= 0, MPFR_RNDN);
        ;
        mpfr_set_si(r28651, mpfr_cmp(r28647, r28650) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28654, r28643, r28653, MPFR_RNDN);
        mpfr_mul(r28655, r28652, r28654, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r28658, r28643, r28657, MPFR_RNDN);
        mpfr_mul(r28659, r28656, r28658, MPFR_RNDN);
        ;
        mpfr_mul(r28661, r28660, r28643, MPFR_RNDN);
        mpfr_add(r28662, r28659, r28661, MPFR_RNDN);
        mpfr_add(r28663, r28655, r28662, MPFR_RNDN);
        if (mpfr_get_si(r28651, MPFR_RNDN)) { mpfr_set(r28664, r28663, MPFR_RNDN); } else { mpfr_set(r28664, r28647, MPFR_RNDN); };
        if (mpfr_get_si(r28649, MPFR_RNDN)) { mpfr_set(r28665, r28647, MPFR_RNDN); } else { mpfr_set(r28665, r28664, MPFR_RNDN); };
        return mpfr_get_d(r28665, MPFR_RNDN);
}

