#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 r4620006 = 1.0f;
        float r4620007 = x;
        float r4620008 = cos(r4620007);
        float r4620009 = r4620006 - r4620008;
        float r4620010 = sin(r4620007);
        float r4620011 = r4620009 / r4620010;
        return r4620011;
}

double f_id(double x) {
        double r4620012 = 1.0;
        double r4620013 = x;
        double r4620014 = cos(r4620013);
        double r4620015 = r4620012 - r4620014;
        double r4620016 = sin(r4620013);
        double r4620017 = r4620015 / r4620016;
        return r4620017;
}


double f_of(float x) {
        float r4620018 = 1.0f;
        float r4620019 = x;
        float r4620020 = sin(r4620019);
        float r4620021 = cos(r4620019);
        float r4620022 = r4620021 + r4620018;
        float r4620023 = r4620020 / r4620022;
        float r4620024 = r4620018 * r4620023;
        return r4620024;
}

double f_od(double x) {
        double r4620025 = 1.0;
        double r4620026 = x;
        double r4620027 = sin(r4620026);
        double r4620028 = cos(r4620026);
        double r4620029 = r4620028 + r4620025;
        double r4620030 = r4620027 / r4620029;
        double r4620031 = r4620025 * r4620030;
        return r4620031;
}

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 r4620032, r4620033, r4620034, r4620035, r4620036, r4620037;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620032, "1", 10, MPFR_RNDN);
        mpfr_init(r4620033);
        mpfr_init(r4620034);
        mpfr_init(r4620035);
        mpfr_init(r4620036);
        mpfr_init(r4620037);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4620033, x, MPFR_RNDN);
        mpfr_cos(r4620034, r4620033, MPFR_RNDN);
        mpfr_sub(r4620035, r4620032, r4620034, MPFR_RNDN);
        mpfr_sin(r4620036, r4620033, MPFR_RNDN);
        mpfr_div(r4620037, r4620035, r4620036, MPFR_RNDN);
        return mpfr_get_d(r4620037, MPFR_RNDN);
}

static mpfr_t r4620038, r4620039, r4620040, r4620041, r4620042, r4620043, r4620044;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620038, "1", 10, MPFR_RNDN);
        mpfr_init(r4620039);
        mpfr_init(r4620040);
        mpfr_init(r4620041);
        mpfr_init(r4620042);
        mpfr_init(r4620043);
        mpfr_init(r4620044);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4620039, x, MPFR_RNDN);
        mpfr_sin(r4620040, r4620039, MPFR_RNDN);
        mpfr_cos(r4620041, r4620039, MPFR_RNDN);
        mpfr_add(r4620042, r4620041, r4620038, MPFR_RNDN);
        mpfr_div(r4620043, r4620040, r4620042, MPFR_RNDN);
        mpfr_mul(r4620044, r4620038, r4620043, MPFR_RNDN);
        return mpfr_get_d(r4620044, MPFR_RNDN);
}

static mpfr_t r4620045, r4620046, r4620047, r4620048, r4620049, r4620050, r4620051;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4620045, "1", 10, MPFR_RNDN);
        mpfr_init(r4620046);
        mpfr_init(r4620047);
        mpfr_init(r4620048);
        mpfr_init(r4620049);
        mpfr_init(r4620050);
        mpfr_init(r4620051);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4620046, x, MPFR_RNDN);
        mpfr_sin(r4620047, r4620046, MPFR_RNDN);
        mpfr_cos(r4620048, r4620046, MPFR_RNDN);
        mpfr_add(r4620049, r4620048, r4620045, MPFR_RNDN);
        mpfr_div(r4620050, r4620047, r4620049, MPFR_RNDN);
        mpfr_mul(r4620051, r4620045, r4620050, MPFR_RNDN);
        return mpfr_get_d(r4620051, MPFR_RNDN);
}

