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

char *name = "NMSE problem 3.4.1";

double f_if(float x) {
        float r5318496 = 1.0f;
        float r5318497 = x;
        float r5318498 = cos(r5318497);
        float r5318499 = r5318496 - r5318498;
        float r5318500 = r5318497 * r5318497;
        float r5318501 = r5318499 / r5318500;
        return r5318501;
}

double f_id(double x) {
        double r5318502 = 1.0;
        double r5318503 = x;
        double r5318504 = cos(r5318503);
        double r5318505 = r5318502 - r5318504;
        double r5318506 = r5318503 * r5318503;
        double r5318507 = r5318505 / r5318506;
        return r5318507;
}


double f_of(float x) {
        float r5318508 = x;
        float r5318509 = -7.621017336353511e-15f;
        bool r5318510 = r5318508 <= r5318509;
        float r5318511 = 1.0f;
        float r5318512 = r5318511 / r5318508;
        float r5318513 = sin(r5318508);
        float r5318514 = r5318513 * r5318513;
        float r5318515 = cos(r5318508);
        float r5318516 = r5318508 * r5318515;
        float r5318517 = r5318516 + r5318508;
        float r5318518 = r5318514 / r5318517;
        float r5318519 = r5318512 * r5318518;
        float r5318520 = 0.4439134345824553f;
        bool r5318521 = r5318508 <= r5318520;
        float r5318522 = 0.5f;
        float r5318523 = 0.001388888888888889f;
        float r5318524 = 4.0f;
        float r5318525 = pow(r5318508, r5318524);
        float r5318526 = r5318523 * r5318525;
        float r5318527 = r5318522 + r5318526;
        float r5318528 = 0.041666666666666664f;
        float r5318529 = r5318508 * r5318508;
        float r5318530 = r5318528 * r5318529;
        float r5318531 = r5318527 - r5318530;
        float r5318532 = r5318513 * r5318513;
        float r5318533 = r5318511 + r5318515;
        float r5318534 = r5318532 / r5318533;
        float r5318535 = r5318534 / r5318529;
        float r5318536 = r5318521 ? r5318531 : r5318535;
        float r5318537 = r5318510 ? r5318519 : r5318536;
        return r5318537;
}

double f_od(double x) {
        double r5318538 = x;
        double r5318539 = -7.621017336353511e-15;
        bool r5318540 = r5318538 <= r5318539;
        double r5318541 = 1.0;
        double r5318542 = r5318541 / r5318538;
        double r5318543 = sin(r5318538);
        double r5318544 = r5318543 * r5318543;
        double r5318545 = cos(r5318538);
        double r5318546 = r5318538 * r5318545;
        double r5318547 = r5318546 + r5318538;
        double r5318548 = r5318544 / r5318547;
        double r5318549 = r5318542 * r5318548;
        double r5318550 = 0.4439134345824553;
        bool r5318551 = r5318538 <= r5318550;
        double r5318552 = 0.5;
        double r5318553 = 0.001388888888888889;
        double r5318554 = 4.0;
        double r5318555 = pow(r5318538, r5318554);
        double r5318556 = r5318553 * r5318555;
        double r5318557 = r5318552 + r5318556;
        double r5318558 = 0.041666666666666664;
        double r5318559 = r5318538 * r5318538;
        double r5318560 = r5318558 * r5318559;
        double r5318561 = r5318557 - r5318560;
        double r5318562 = r5318543 * r5318543;
        double r5318563 = r5318541 + r5318545;
        double r5318564 = r5318562 / r5318563;
        double r5318565 = r5318564 / r5318559;
        double r5318566 = r5318551 ? r5318561 : r5318565;
        double r5318567 = r5318540 ? r5318549 : r5318566;
        return r5318567;
}

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 r5318568, r5318569, r5318570, r5318571, r5318572, r5318573;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5318568, "1", 10, MPFR_RNDN);
        mpfr_init(r5318569);
        mpfr_init(r5318570);
        mpfr_init(r5318571);
        mpfr_init(r5318572);
        mpfr_init(r5318573);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5318569, x, MPFR_RNDN);
        mpfr_cos(r5318570, r5318569, MPFR_RNDN);
        mpfr_sub(r5318571, r5318568, r5318570, MPFR_RNDN);
        mpfr_sqr(r5318572, r5318569, MPFR_RNDN);
        mpfr_div(r5318573, r5318571, r5318572, MPFR_RNDN);
        return mpfr_get_d(r5318573, MPFR_RNDN);
}

static mpfr_t r5318574, r5318575, r5318576, r5318577, r5318578, r5318579, r5318580, r5318581, r5318582, r5318583, r5318584, r5318585, r5318586, r5318587, r5318588, r5318589, r5318590, r5318591, r5318592, r5318593, r5318594, r5318595, r5318596, r5318597, r5318598, r5318599, r5318600, r5318601, r5318602, r5318603;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318574);
        mpfr_init_set_str(r5318575, "-7.621017336353511e-15", 10, MPFR_RNDN);
        mpfr_init(r5318576);
        mpfr_init_set_str(r5318577, "1", 10, MPFR_RNDN);
        mpfr_init(r5318578);
        mpfr_init(r5318579);
        mpfr_init(r5318580);
        mpfr_init(r5318581);
        mpfr_init(r5318582);
        mpfr_init(r5318583);
        mpfr_init(r5318584);
        mpfr_init(r5318585);
        mpfr_init_set_str(r5318586, "0.4439134345824553", 10, MPFR_RNDN);
        mpfr_init(r5318587);
        mpfr_init_set_str(r5318588, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5318589, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r5318590, "4", 10, MPFR_RNDN);
        mpfr_init(r5318591);
        mpfr_init(r5318592);
        mpfr_init(r5318593);
        mpfr_init_set_str(r5318594, "1/24", 10, MPFR_RNDN);
        mpfr_init(r5318595);
        mpfr_init(r5318596);
        mpfr_init(r5318597);
        mpfr_init(r5318598);
        mpfr_init(r5318599);
        mpfr_init(r5318600);
        mpfr_init(r5318601);
        mpfr_init(r5318602);
        mpfr_init(r5318603);
}

double f_fm(double x) {
        mpfr_set_d(r5318574, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5318576, mpfr_cmp(r5318574, r5318575) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5318578, r5318577, r5318574, MPFR_RNDN);
        mpfr_sin(r5318579, r5318574, MPFR_RNDN);
        mpfr_sqr(r5318580, r5318579, MPFR_RNDN);
        mpfr_cos(r5318581, r5318574, MPFR_RNDN);
        mpfr_mul(r5318582, r5318574, r5318581, MPFR_RNDN);
        mpfr_add(r5318583, r5318582, r5318574, MPFR_RNDN);
        mpfr_div(r5318584, r5318580, r5318583, MPFR_RNDN);
        mpfr_mul(r5318585, r5318578, r5318584, MPFR_RNDN);
        ;
        mpfr_set_si(r5318587, mpfr_cmp(r5318574, r5318586) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r5318591, r5318574, r5318590, MPFR_RNDN);
        mpfr_mul(r5318592, r5318589, r5318591, MPFR_RNDN);
        mpfr_add(r5318593, r5318588, r5318592, MPFR_RNDN);
        ;
        mpfr_sqr(r5318595, r5318574, MPFR_RNDN);
        mpfr_mul(r5318596, r5318594, r5318595, MPFR_RNDN);
        mpfr_sub(r5318597, r5318593, r5318596, MPFR_RNDN);
        mpfr_mul(r5318598, r5318579, r5318579, MPFR_RNDN);
        mpfr_add(r5318599, r5318577, r5318581, MPFR_RNDN);
        mpfr_div(r5318600, r5318598, r5318599, MPFR_RNDN);
        mpfr_div(r5318601, r5318600, r5318595, MPFR_RNDN);
        if (mpfr_get_si(r5318587, MPFR_RNDN)) { mpfr_set(r5318602, r5318597, MPFR_RNDN); } else { mpfr_set(r5318602, r5318601, MPFR_RNDN); };
        if (mpfr_get_si(r5318576, MPFR_RNDN)) { mpfr_set(r5318603, r5318585, MPFR_RNDN); } else { mpfr_set(r5318603, r5318602, MPFR_RNDN); };
        return mpfr_get_d(r5318603, MPFR_RNDN);
}

static mpfr_t r5318604, r5318605, r5318606, r5318607, r5318608, r5318609, r5318610, r5318611, r5318612, r5318613, r5318614, r5318615, r5318616, r5318617, r5318618, r5318619, r5318620, r5318621, r5318622, r5318623, r5318624, r5318625, r5318626, r5318627, r5318628, r5318629, r5318630, r5318631, r5318632, r5318633;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5318604);
        mpfr_init_set_str(r5318605, "-7.621017336353511e-15", 10, MPFR_RNDN);
        mpfr_init(r5318606);
        mpfr_init_set_str(r5318607, "1", 10, MPFR_RNDN);
        mpfr_init(r5318608);
        mpfr_init(r5318609);
        mpfr_init(r5318610);
        mpfr_init(r5318611);
        mpfr_init(r5318612);
        mpfr_init(r5318613);
        mpfr_init(r5318614);
        mpfr_init(r5318615);
        mpfr_init_set_str(r5318616, "0.4439134345824553", 10, MPFR_RNDN);
        mpfr_init(r5318617);
        mpfr_init_set_str(r5318618, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r5318619, "1/720", 10, MPFR_RNDN);
        mpfr_init_set_str(r5318620, "4", 10, MPFR_RNDN);
        mpfr_init(r5318621);
        mpfr_init(r5318622);
        mpfr_init(r5318623);
        mpfr_init_set_str(r5318624, "1/24", 10, MPFR_RNDN);
        mpfr_init(r5318625);
        mpfr_init(r5318626);
        mpfr_init(r5318627);
        mpfr_init(r5318628);
        mpfr_init(r5318629);
        mpfr_init(r5318630);
        mpfr_init(r5318631);
        mpfr_init(r5318632);
        mpfr_init(r5318633);
}

double f_dm(double x) {
        mpfr_set_d(r5318604, x, MPFR_RNDN);
        ;
        mpfr_set_si(r5318606, mpfr_cmp(r5318604, r5318605) <= 0, MPFR_RNDN);
        ;
        mpfr_div(r5318608, r5318607, r5318604, MPFR_RNDN);
        mpfr_sin(r5318609, r5318604, MPFR_RNDN);
        mpfr_sqr(r5318610, r5318609, MPFR_RNDN);
        mpfr_cos(r5318611, r5318604, MPFR_RNDN);
        mpfr_mul(r5318612, r5318604, r5318611, MPFR_RNDN);
        mpfr_add(r5318613, r5318612, r5318604, MPFR_RNDN);
        mpfr_div(r5318614, r5318610, r5318613, MPFR_RNDN);
        mpfr_mul(r5318615, r5318608, r5318614, MPFR_RNDN);
        ;
        mpfr_set_si(r5318617, mpfr_cmp(r5318604, r5318616) <= 0, MPFR_RNDN);
        ;
        ;
        ;
        mpfr_pow(r5318621, r5318604, r5318620, MPFR_RNDN);
        mpfr_mul(r5318622, r5318619, r5318621, MPFR_RNDN);
        mpfr_add(r5318623, r5318618, r5318622, MPFR_RNDN);
        ;
        mpfr_sqr(r5318625, r5318604, MPFR_RNDN);
        mpfr_mul(r5318626, r5318624, r5318625, MPFR_RNDN);
        mpfr_sub(r5318627, r5318623, r5318626, MPFR_RNDN);
        mpfr_mul(r5318628, r5318609, r5318609, MPFR_RNDN);
        mpfr_add(r5318629, r5318607, r5318611, MPFR_RNDN);
        mpfr_div(r5318630, r5318628, r5318629, MPFR_RNDN);
        mpfr_div(r5318631, r5318630, r5318625, MPFR_RNDN);
        if (mpfr_get_si(r5318617, MPFR_RNDN)) { mpfr_set(r5318632, r5318627, MPFR_RNDN); } else { mpfr_set(r5318632, r5318631, MPFR_RNDN); };
        if (mpfr_get_si(r5318606, MPFR_RNDN)) { mpfr_set(r5318633, r5318615, MPFR_RNDN); } else { mpfr_set(r5318633, r5318632, MPFR_RNDN); };
        return mpfr_get_d(r5318633, MPFR_RNDN);
}

