#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 r5354978 = 1.0f;
        float r5354979 = x;
        float r5354980 = cos(r5354979);
        float r5354981 = r5354978 - r5354980;
        float r5354982 = sin(r5354979);
        float r5354983 = r5354981 / r5354982;
        return r5354983;
}

double f_id(double x) {
        double r5354984 = 1.0;
        double r5354985 = x;
        double r5354986 = cos(r5354985);
        double r5354987 = r5354984 - r5354986;
        double r5354988 = sin(r5354985);
        double r5354989 = r5354987 / r5354988;
        return r5354989;
}


double f_of(float x) {
        float r5354990 = x;
        float r5354991 = sin(r5354990);
        float r5354992 = 1.0f;
        float r5354993 = r5354991 / r5354992;
        float r5354994 = cos(r5354990);
        float r5354995 = r5354992 + r5354994;
        float r5354996 = r5354992 / r5354995;
        float r5354997 = r5354993 * r5354996;
        return r5354997;
}

double f_od(double x) {
        double r5354998 = x;
        double r5354999 = sin(r5354998);
        double r5355000 = 1.0;
        double r5355001 = r5354999 / r5355000;
        double r5355002 = cos(r5354998);
        double r5355003 = r5355000 + r5355002;
        double r5355004 = r5355000 / r5355003;
        double r5355005 = r5355001 * r5355004;
        return r5355005;
}

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 r5355006, r5355007, r5355008, r5355009, r5355010, r5355011;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5355006, "1", 10, MPFR_RNDN);
        mpfr_init(r5355007);
        mpfr_init(r5355008);
        mpfr_init(r5355009);
        mpfr_init(r5355010);
        mpfr_init(r5355011);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5355007, x, MPFR_RNDN);
        mpfr_cos(r5355008, r5355007, MPFR_RNDN);
        mpfr_sub(r5355009, r5355006, r5355008, MPFR_RNDN);
        mpfr_sin(r5355010, r5355007, MPFR_RNDN);
        mpfr_div(r5355011, r5355009, r5355010, MPFR_RNDN);
        return mpfr_get_d(r5355011, MPFR_RNDN);
}

static mpfr_t r5355012, r5355013, r5355014, r5355015, r5355016, r5355017, r5355018, r5355019;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5355012);
        mpfr_init(r5355013);
        mpfr_init_set_str(r5355014, "1", 10, MPFR_RNDN);
        mpfr_init(r5355015);
        mpfr_init(r5355016);
        mpfr_init(r5355017);
        mpfr_init(r5355018);
        mpfr_init(r5355019);
}

double f_fm(double x) {
        mpfr_set_d(r5355012, x, MPFR_RNDN);
        mpfr_sin(r5355013, r5355012, MPFR_RNDN);
        ;
        mpfr_div(r5355015, r5355013, r5355014, MPFR_RNDN);
        mpfr_cos(r5355016, r5355012, MPFR_RNDN);
        mpfr_add(r5355017, r5355014, r5355016, MPFR_RNDN);
        mpfr_div(r5355018, r5355014, r5355017, MPFR_RNDN);
        mpfr_mul(r5355019, r5355015, r5355018, MPFR_RNDN);
        return mpfr_get_d(r5355019, MPFR_RNDN);
}

static mpfr_t r5355020, r5355021, r5355022, r5355023, r5355024, r5355025, r5355026, r5355027;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5355020);
        mpfr_init(r5355021);
        mpfr_init_set_str(r5355022, "1", 10, MPFR_RNDN);
        mpfr_init(r5355023);
        mpfr_init(r5355024);
        mpfr_init(r5355025);
        mpfr_init(r5355026);
        mpfr_init(r5355027);
}

double f_dm(double x) {
        mpfr_set_d(r5355020, x, MPFR_RNDN);
        mpfr_sin(r5355021, r5355020, MPFR_RNDN);
        ;
        mpfr_div(r5355023, r5355021, r5355022, MPFR_RNDN);
        mpfr_cos(r5355024, r5355020, MPFR_RNDN);
        mpfr_add(r5355025, r5355022, r5355024, MPFR_RNDN);
        mpfr_div(r5355026, r5355022, r5355025, MPFR_RNDN);
        mpfr_mul(r5355027, r5355023, r5355026, MPFR_RNDN);
        return mpfr_get_d(r5355027, MPFR_RNDN);
}

