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

char *name = "NMSE example 3.4";

double f_if(float x) {
        float r29043 = 1;
        float r29044 = x;
        float r29045 = cos(r29044);
        float r29046 = r29043 - r29045;
        float r29047 = sin(r29044);
        float r29048 = r29046 / r29047;
        return r29048;
}

double f_id(double x) {
        double r29049 = 1;
        double r29050 = x;
        double r29051 = cos(r29050);
        double r29052 = r29049 - r29051;
        double r29053 = sin(r29050);
        double r29054 = r29052 / r29053;
        return r29054;
}


double f_of(float x) {
        float r29055 = x;
        float r29056 = -0.007466980376524548;
        bool r29057 = r29055 <= r29056;
        float r29058 = sin(r29055);
        float r29059 = r29058 * r29058;
        float r29060 = 1;
        float r29061 = cos(r29055);
        float r29062 = r29060 + r29061;
        float r29063 = r29059 / r29062;
        float r29064 = r29063 / r29058;
        float r29065 = 0.0019551307389888218;
        bool r29066 = r29055 <= r29065;
        float r29067 = 1/24;
        float r29068 = 3;
        float r29069 = pow(r29055, r29068);
        float r29070 = r29067 * r29069;
        float r29071 = 1/240;
        float r29072 = 5;
        float r29073 = pow(r29055, r29072);
        float r29074 = r29071 * r29073;
        float r29075 = 1/2;
        float r29076 = r29075 * r29055;
        float r29077 = r29074 + r29076;
        float r29078 = r29070 + r29077;
        float r29079 = r29066 ? r29078 : r29064;
        float r29080 = r29057 ? r29064 : r29079;
        return r29080;
}

double f_od(double x) {
        double r29081 = x;
        double r29082 = -0.007466980376524548;
        bool r29083 = r29081 <= r29082;
        double r29084 = sin(r29081);
        double r29085 = r29084 * r29084;
        double r29086 = 1;
        double r29087 = cos(r29081);
        double r29088 = r29086 + r29087;
        double r29089 = r29085 / r29088;
        double r29090 = r29089 / r29084;
        double r29091 = 0.0019551307389888218;
        bool r29092 = r29081 <= r29091;
        double r29093 = 1/24;
        double r29094 = 3;
        double r29095 = pow(r29081, r29094);
        double r29096 = r29093 * r29095;
        double r29097 = 1/240;
        double r29098 = 5;
        double r29099 = pow(r29081, r29098);
        double r29100 = r29097 * r29099;
        double r29101 = 1/2;
        double r29102 = r29101 * r29081;
        double r29103 = r29100 + r29102;
        double r29104 = r29096 + r29103;
        double r29105 = r29092 ? r29104 : r29090;
        double r29106 = r29083 ? r29090 : r29105;
        return r29106;
}

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 r29107, r29108, r29109, r29110, r29111, r29112;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2448);
        mpfr_init_set_str(r29107, "1", 10, MPFR_RNDN);
        mpfr_init(r29108);
        mpfr_init(r29109);
        mpfr_init(r29110);
        mpfr_init(r29111);
        mpfr_init(r29112);
}

double f_im(double x) {
        ;
        mpfr_set_d(r29108, x, MPFR_RNDN);
        mpfr_cos(r29109, r29108, MPFR_RNDN);
        mpfr_sub(r29110, r29107, r29109, MPFR_RNDN);
        mpfr_sin(r29111, r29108, MPFR_RNDN);
        mpfr_div(r29112, r29110, r29111, MPFR_RNDN);
        return mpfr_get_d(r29112, MPFR_RNDN);
}

static mpfr_t r29113, r29114, r29115, r29116, r29117, r29118, r29119, r29120, r29121, r29122, r29123, r29124, r29125, r29126, r29127, r29128, r29129, r29130, r29131, r29132, r29133, r29134, r29135, r29136, r29137, r29138;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r29113);
        mpfr_init_set_str(r29114, "-0.007466980376524548", 10, MPFR_RNDN);
        mpfr_init(r29115);
        mpfr_init(r29116);
        mpfr_init(r29117);
        mpfr_init_set_str(r29118, "1", 10, MPFR_RNDN);
        mpfr_init(r29119);
        mpfr_init(r29120);
        mpfr_init(r29121);
        mpfr_init(r29122);
        mpfr_init_set_str(r29123, "0.0019551307389888218", 10, MPFR_RNDN);
        mpfr_init(r29124);
        mpfr_init_set_str(r29125, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r29126, "3", 10, MPFR_RNDN);
        mpfr_init(r29127);
        mpfr_init(r29128);
        mpfr_init_set_str(r29129, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r29130, "5", 10, MPFR_RNDN);
        mpfr_init(r29131);
        mpfr_init(r29132);
        mpfr_init_set_str(r29133, "1/2", 10, MPFR_RNDN);
        mpfr_init(r29134);
        mpfr_init(r29135);
        mpfr_init(r29136);
        mpfr_init(r29137);
        mpfr_init(r29138);
}

double f_fm(double x) {
        mpfr_set_d(r29113, x, MPFR_RNDN);
        ;
        mpfr_set_si(r29115, mpfr_cmp(r29113, r29114) <= 0, MPFR_RNDN);
        mpfr_sin(r29116, r29113, MPFR_RNDN);
        mpfr_mul(r29117, r29116, r29116, MPFR_RNDN);
        ;
        mpfr_cos(r29119, r29113, MPFR_RNDN);
        mpfr_add(r29120, r29118, r29119, MPFR_RNDN);
        mpfr_div(r29121, r29117, r29120, MPFR_RNDN);
        mpfr_div(r29122, r29121, r29116, MPFR_RNDN);
        ;
        mpfr_set_si(r29124, mpfr_cmp(r29113, r29123) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r29127, r29113, r29126, MPFR_RNDN);
        mpfr_mul(r29128, r29125, r29127, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r29131, r29113, r29130, MPFR_RNDN);
        mpfr_mul(r29132, r29129, r29131, MPFR_RNDN);
        ;
        mpfr_mul(r29134, r29133, r29113, MPFR_RNDN);
        mpfr_add(r29135, r29132, r29134, MPFR_RNDN);
        mpfr_add(r29136, r29128, r29135, MPFR_RNDN);
        if (mpfr_get_si(r29124, MPFR_RNDN)) { mpfr_set(r29137, r29136, MPFR_RNDN); } else { mpfr_set(r29137, r29122, MPFR_RNDN); };
        if (mpfr_get_si(r29115, MPFR_RNDN)) { mpfr_set(r29138, r29122, MPFR_RNDN); } else { mpfr_set(r29138, r29137, MPFR_RNDN); };
        return mpfr_get_d(r29138, MPFR_RNDN);
}

static mpfr_t r29139, r29140, r29141, r29142, r29143, r29144, r29145, r29146, r29147, r29148, r29149, r29150, r29151, r29152, r29153, r29154, r29155, r29156, r29157, r29158, r29159, r29160, r29161, r29162, r29163, r29164;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2448);
        mpfr_init(r29139);
        mpfr_init_set_str(r29140, "-0.007466980376524548", 10, MPFR_RNDN);
        mpfr_init(r29141);
        mpfr_init(r29142);
        mpfr_init(r29143);
        mpfr_init_set_str(r29144, "1", 10, MPFR_RNDN);
        mpfr_init(r29145);
        mpfr_init(r29146);
        mpfr_init(r29147);
        mpfr_init(r29148);
        mpfr_init_set_str(r29149, "0.0019551307389888218", 10, MPFR_RNDN);
        mpfr_init(r29150);
        mpfr_init_set_str(r29151, "1/24", 10, MPFR_RNDN);
        mpfr_init_set_str(r29152, "3", 10, MPFR_RNDN);
        mpfr_init(r29153);
        mpfr_init(r29154);
        mpfr_init_set_str(r29155, "1/240", 10, MPFR_RNDN);
        mpfr_init_set_str(r29156, "5", 10, MPFR_RNDN);
        mpfr_init(r29157);
        mpfr_init(r29158);
        mpfr_init_set_str(r29159, "1/2", 10, MPFR_RNDN);
        mpfr_init(r29160);
        mpfr_init(r29161);
        mpfr_init(r29162);
        mpfr_init(r29163);
        mpfr_init(r29164);
}

double f_dm(double x) {
        mpfr_set_d(r29139, x, MPFR_RNDN);
        ;
        mpfr_set_si(r29141, mpfr_cmp(r29139, r29140) <= 0, MPFR_RNDN);
        mpfr_sin(r29142, r29139, MPFR_RNDN);
        mpfr_mul(r29143, r29142, r29142, MPFR_RNDN);
        ;
        mpfr_cos(r29145, r29139, MPFR_RNDN);
        mpfr_add(r29146, r29144, r29145, MPFR_RNDN);
        mpfr_div(r29147, r29143, r29146, MPFR_RNDN);
        mpfr_div(r29148, r29147, r29142, MPFR_RNDN);
        ;
        mpfr_set_si(r29150, mpfr_cmp(r29139, r29149) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r29153, r29139, r29152, MPFR_RNDN);
        mpfr_mul(r29154, r29151, r29153, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r29157, r29139, r29156, MPFR_RNDN);
        mpfr_mul(r29158, r29155, r29157, MPFR_RNDN);
        ;
        mpfr_mul(r29160, r29159, r29139, MPFR_RNDN);
        mpfr_add(r29161, r29158, r29160, MPFR_RNDN);
        mpfr_add(r29162, r29154, r29161, MPFR_RNDN);
        if (mpfr_get_si(r29150, MPFR_RNDN)) { mpfr_set(r29163, r29162, MPFR_RNDN); } else { mpfr_set(r29163, r29148, MPFR_RNDN); };
        if (mpfr_get_si(r29141, MPFR_RNDN)) { mpfr_set(r29164, r29148, MPFR_RNDN); } else { mpfr_set(r29164, r29163, MPFR_RNDN); };
        return mpfr_get_d(r29164, MPFR_RNDN);
}

