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

char *name = "NMSE problem 3.4.5";

double f_if(float x) {
        float r5352535 = x;
        float r5352536 = sin(r5352535);
        float r5352537 = r5352535 - r5352536;
        float r5352538 = tan(r5352535);
        float r5352539 = r5352535 - r5352538;
        float r5352540 = r5352537 / r5352539;
        return r5352540;
}

double f_id(double x) {
        double r5352541 = x;
        double r5352542 = sin(r5352541);
        double r5352543 = r5352541 - r5352542;
        double r5352544 = tan(r5352541);
        double r5352545 = r5352541 - r5352544;
        double r5352546 = r5352543 / r5352545;
        return r5352546;
}


double f_of(float x) {
        float r5352547 = x;
        float r5352548 = -4.436569855739804e-07f;
        bool r5352549 = r5352547 <= r5352548;
        float r5352550 = sin(r5352547);
        float r5352551 = r5352547 - r5352550;
        float r5352552 = tan(r5352547);
        float r5352553 = r5352547 - r5352552;
        float r5352554 = r5352551 / r5352553;
        float r5352555 = 1.9330446047513736f;
        bool r5352556 = r5352547 <= r5352555;
        float r5352557 = 0.225f;
        float r5352558 = r5352547 * r5352547;
        float r5352559 = r5352557 * r5352558;
        float r5352560 = 0.5f;
        float r5352561 = 0.009642857142857142f;
        float r5352562 = 4.0f;
        float r5352563 = pow(r5352547, r5352562);
        float r5352564 = r5352561 * r5352563;
        float r5352565 = r5352560 + r5352564;
        float r5352566 = r5352559 - r5352565;
        float r5352567 = r5352556 ? r5352566 : r5352554;
        float r5352568 = r5352549 ? r5352554 : r5352567;
        return r5352568;
}

double f_od(double x) {
        double r5352569 = x;
        double r5352570 = -4.436569855739804e-07;
        bool r5352571 = r5352569 <= r5352570;
        double r5352572 = sin(r5352569);
        double r5352573 = r5352569 - r5352572;
        double r5352574 = tan(r5352569);
        double r5352575 = r5352569 - r5352574;
        double r5352576 = r5352573 / r5352575;
        double r5352577 = 1.9330446047513736;
        bool r5352578 = r5352569 <= r5352577;
        double r5352579 = 0.225;
        double r5352580 = r5352569 * r5352569;
        double r5352581 = r5352579 * r5352580;
        double r5352582 = 0.5;
        double r5352583 = 0.009642857142857142;
        double r5352584 = 4.0;
        double r5352585 = pow(r5352569, r5352584);
        double r5352586 = r5352583 * r5352585;
        double r5352587 = r5352582 + r5352586;
        double r5352588 = r5352581 - r5352587;
        double r5352589 = r5352578 ? r5352588 : r5352576;
        double r5352590 = r5352571 ? r5352576 : r5352589;
        return r5352590;
}

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 r5352591, r5352592, r5352593, r5352594, r5352595, r5352596;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352591);
        mpfr_init(r5352592);
        mpfr_init(r5352593);
        mpfr_init(r5352594);
        mpfr_init(r5352595);
        mpfr_init(r5352596);
}

double f_im(double x) {
        mpfr_set_d(r5352591, x, MPFR_RNDN);
        mpfr_sin(r5352592, r5352591, MPFR_RNDN);
        mpfr_sub(r5352593, r5352591, r5352592, MPFR_RNDN);
        mpfr_tan(r5352594, r5352591, MPFR_RNDN);
        mpfr_sub(r5352595, r5352591, r5352594, MPFR_RNDN);
        mpfr_div(r5352596, r5352593, r5352595, MPFR_RNDN);
        return mpfr_get_d(r5352596, MPFR_RNDN);
}

static mpfr_t r5352597, r5352598, r5352599, r5352600, r5352601, r5352602, r5352603, r5352604, r5352605, r5352606, r5352607, r5352608, r5352609, r5352610, r5352611, r5352612, r5352613, r5352614, r5352615, r5352616, r5352617, r5352618;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352597);
        mpfr_init_set_str(r5352598, "-4.436569855739804e-07", 10, MPFR_RNDN);
        mpfr_init(r5352599);
        mpfr_init(r5352600);
        mpfr_init(r5352601);
        mpfr_init(r5352602);
        mpfr_init(r5352603);
        mpfr_init(r5352604);
        mpfr_init_set_str(r5352605, "1.9330446047513736", 10, MPFR_RNDN);
        mpfr_init(r5352606);
        mpfr_init_set_str(r5352607, "9/40", 10, MPFR_RNDN);
        mpfr_init(r5352608);
        mpfr_init(r5352609);
        mpfr_init_set_str(r5352610, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5352611, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r5352612, "4", 10, MPFR_RNDN);
        mpfr_init(r5352613);
        mpfr_init(r5352614);
        mpfr_init(r5352615);
        mpfr_init(r5352616);
        mpfr_init(r5352617);
        mpfr_init(r5352618);
}

double f_fm(double x) {
        mpfr_set_d(r5352597, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5352599, mpfr_cmp(r5352597, r5352598) <= 0, MPFR_RNDN);
        mpfr_sin(r5352600, r5352597, MPFR_RNDN);
        mpfr_sub(r5352601, r5352597, r5352600, MPFR_RNDN);
        mpfr_tan(r5352602, r5352597, MPFR_RNDN);
        mpfr_sub(r5352603, r5352597, r5352602, MPFR_RNDN);
        mpfr_div(r5352604, r5352601, r5352603, MPFR_RNDN);
        ;
        mpfr_set_si(r5352606, mpfr_cmp(r5352597, r5352605) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r5352608, r5352597, MPFR_RNDN);
        mpfr_mul(r5352609, r5352607, r5352608, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r5352613, r5352597, r5352612, MPFR_RNDN);
        mpfr_mul(r5352614, r5352611, r5352613, MPFR_RNDN);
        mpfr_add(r5352615, r5352610, r5352614, MPFR_RNDN);
        mpfr_sub(r5352616, r5352609, r5352615, MPFR_RNDN);
        if (mpfr_get_si(r5352606, MPFR_RNDN)) { mpfr_set(r5352617, r5352616, MPFR_RNDN); } else { mpfr_set(r5352617, r5352604, MPFR_RNDN); };
        if (mpfr_get_si(r5352599, MPFR_RNDN)) { mpfr_set(r5352618, r5352604, MPFR_RNDN); } else { mpfr_set(r5352618, r5352617, MPFR_RNDN); };
        return mpfr_get_d(r5352618, MPFR_RNDN);
}

static mpfr_t r5352619, r5352620, r5352621, r5352622, r5352623, r5352624, r5352625, r5352626, r5352627, r5352628, r5352629, r5352630, r5352631, r5352632, r5352633, r5352634, r5352635, r5352636, r5352637, r5352638, r5352639, r5352640;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5352619);
        mpfr_init_set_str(r5352620, "-4.436569855739804e-07", 10, MPFR_RNDN);
        mpfr_init(r5352621);
        mpfr_init(r5352622);
        mpfr_init(r5352623);
        mpfr_init(r5352624);
        mpfr_init(r5352625);
        mpfr_init(r5352626);
        mpfr_init_set_str(r5352627, "1.9330446047513736", 10, MPFR_RNDN);
        mpfr_init(r5352628);
        mpfr_init_set_str(r5352629, "9/40", 10, MPFR_RNDN);
        mpfr_init(r5352630);
        mpfr_init(r5352631);
        mpfr_init_set_str(r5352632, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5352633, "27/2800", 10, MPFR_RNDN);
        mpfr_init_set_str(r5352634, "4", 10, MPFR_RNDN);
        mpfr_init(r5352635);
        mpfr_init(r5352636);
        mpfr_init(r5352637);
        mpfr_init(r5352638);
        mpfr_init(r5352639);
        mpfr_init(r5352640);
}

double f_dm(double x) {
        mpfr_set_d(r5352619, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5352621, mpfr_cmp(r5352619, r5352620) <= 0, MPFR_RNDN);
        mpfr_sin(r5352622, r5352619, MPFR_RNDN);
        mpfr_sub(r5352623, r5352619, r5352622, MPFR_RNDN);
        mpfr_tan(r5352624, r5352619, MPFR_RNDN);
        mpfr_sub(r5352625, r5352619, r5352624, MPFR_RNDN);
        mpfr_div(r5352626, r5352623, r5352625, MPFR_RNDN);
        ;
        mpfr_set_si(r5352628, mpfr_cmp(r5352619, r5352627) <= 0, MPFR_RNDN);
        ;
        mpfr_sqr(r5352630, r5352619, MPFR_RNDN);
        mpfr_mul(r5352631, r5352629, r5352630, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r5352635, r5352619, r5352634, MPFR_RNDN);
        mpfr_mul(r5352636, r5352633, r5352635, MPFR_RNDN);
        mpfr_add(r5352637, r5352632, r5352636, MPFR_RNDN);
        mpfr_sub(r5352638, r5352631, r5352637, MPFR_RNDN);
        if (mpfr_get_si(r5352628, MPFR_RNDN)) { mpfr_set(r5352639, r5352638, MPFR_RNDN); } else { mpfr_set(r5352639, r5352626, MPFR_RNDN); };
        if (mpfr_get_si(r5352621, MPFR_RNDN)) { mpfr_set(r5352640, r5352626, MPFR_RNDN); } else { mpfr_set(r5352640, r5352639, MPFR_RNDN); };
        return mpfr_get_d(r5352640, MPFR_RNDN);
}

