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

char *name = "NMSE example 3.5";

double f_if(float N) {
        float r4775767 = N;
        float r4775768 = 1.0f;
        float r4775769 = r4775767 + r4775768;
        float r4775770 = atan(r4775769);
        float r4775771 = atan(r4775767);
        float r4775772 = r4775770 - r4775771;
        return r4775772;
}

double f_id(double N) {
        double r4775773 = N;
        double r4775774 = 1.0;
        double r4775775 = r4775773 + r4775774;
        double r4775776 = atan(r4775775);
        double r4775777 = atan(r4775773);
        double r4775778 = r4775776 - r4775777;
        return r4775778;
}


double f_of(float N) {
        float r4775779 = 1.0f;
        float r4775780 = 0.0f;
        float r4775781 = r4775779 + r4775780;
        float r4775782 = N;
        float r4775783 = r4775782 * r4775782;
        float r4775784 = r4775783 + r4775782;
        float r4775785 = r4775784 + r4775779;
        float r4775786 = atan2(r4775781, r4775785);
        return r4775786;
}

double f_od(double N) {
        double r4775787 = 1.0;
        double r4775788 = 0.0;
        double r4775789 = r4775787 + r4775788;
        double r4775790 = N;
        double r4775791 = r4775790 * r4775790;
        double r4775792 = r4775791 + r4775790;
        double r4775793 = r4775792 + r4775787;
        double r4775794 = atan2(r4775789, r4775793);
        return r4775794;
}

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 r4775795, r4775796, r4775797, r4775798, r4775799, r4775800;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r4775795);
        mpfr_init_set_str(r4775796, "1", 10, MPFR_RNDN);
        mpfr_init(r4775797);
        mpfr_init(r4775798);
        mpfr_init(r4775799);
        mpfr_init(r4775800);
}

double f_im(double N) {
        mpfr_set_d(r4775795, N, MPFR_RNDN);
        ;
        mpfr_add(r4775797, r4775795, r4775796, MPFR_RNDN);
        mpfr_atan(r4775798, r4775797, MPFR_RNDN);
        mpfr_atan(r4775799, r4775795, MPFR_RNDN);
        mpfr_sub(r4775800, r4775798, r4775799, MPFR_RNDN);
        return mpfr_get_d(r4775800, MPFR_RNDN);
}

static mpfr_t r4775801, r4775802, r4775803, r4775804, r4775805, r4775806, r4775807, r4775808;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775801, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r4775802, "0", 10, MPFR_RNDN);
        mpfr_init(r4775803);
        mpfr_init(r4775804);
        mpfr_init(r4775805);
        mpfr_init(r4775806);
        mpfr_init(r4775807);
        mpfr_init(r4775808);
}

double f_fm(double N) {
        ;
        ;
        mpfr_add(r4775803, r4775801, r4775802, MPFR_RNDN);
        mpfr_set_d(r4775804, N, MPFR_RNDN);
        mpfr_sqr(r4775805, r4775804, MPFR_RNDN);
        mpfr_add(r4775806, r4775805, r4775804, MPFR_RNDN);
        mpfr_add(r4775807, r4775806, r4775801, MPFR_RNDN);
        mpfr_atan2(r4775808, r4775803, r4775807, MPFR_RNDN);
        return mpfr_get_d(r4775808, MPFR_RNDN);
}

static mpfr_t r4775809, r4775810, r4775811, r4775812, r4775813, r4775814, r4775815, r4775816;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775809, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r4775810, "0", 10, MPFR_RNDN);
        mpfr_init(r4775811);
        mpfr_init(r4775812);
        mpfr_init(r4775813);
        mpfr_init(r4775814);
        mpfr_init(r4775815);
        mpfr_init(r4775816);
}

double f_dm(double N) {
        ;
        ;
        mpfr_add(r4775811, r4775809, r4775810, MPFR_RNDN);
        mpfr_set_d(r4775812, N, MPFR_RNDN);
        mpfr_sqr(r4775813, r4775812, MPFR_RNDN);
        mpfr_add(r4775814, r4775813, r4775812, MPFR_RNDN);
        mpfr_add(r4775815, r4775814, r4775809, MPFR_RNDN);
        mpfr_atan2(r4775816, r4775811, r4775815, MPFR_RNDN);
        return mpfr_get_d(r4775816, MPFR_RNDN);
}

