#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 r16868 = N;
        float r16869 = 1.0f;
        float r16870 = r16868 + r16869;
        float r16871 = atan(r16870);
        float r16872 = atan(r16868);
        float r16873 = r16871 - r16872;
        return r16873;
}

double f_id(double N) {
        double r16874 = N;
        double r16875 = 1.0;
        double r16876 = r16874 + r16875;
        double r16877 = atan(r16876);
        double r16878 = atan(r16874);
        double r16879 = r16877 - r16878;
        return r16879;
}


double f_of(float N) {
        float r16880 = 1.0f;
        float r16881 = 0.0f;
        float r16882 = r16880 - r16881;
        float r16883 = N;
        float r16884 = r16880 + r16883;
        float r16885 = fma(r16883, r16884, r16880);
        float r16886 = atan2(r16882, r16885);
        return r16886;
}

double f_od(double N) {
        double r16887 = 1.0;
        double r16888 = 0.0;
        double r16889 = r16887 - r16888;
        double r16890 = N;
        double r16891 = r16887 + r16890;
        double r16892 = fma(r16890, r16891, r16887);
        double r16893 = atan2(r16889, r16892);
        return r16893;
}

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 r16894, r16895, r16896, r16897, r16898, r16899;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r16894);
        mpfr_init_set_str(r16895, "1", 10, MPFR_RNDN);
        mpfr_init(r16896);
        mpfr_init(r16897);
        mpfr_init(r16898);
        mpfr_init(r16899);
}

double f_im(double N) {
        mpfr_set_d(r16894, N, MPFR_RNDN);
        ;
        mpfr_add(r16896, r16894, r16895, MPFR_RNDN);
        mpfr_atan(r16897, r16896, MPFR_RNDN);
        mpfr_atan(r16898, r16894, MPFR_RNDN);
        mpfr_sub(r16899, r16897, r16898, MPFR_RNDN);
        return mpfr_get_d(r16899, MPFR_RNDN);
}

static mpfr_t r16900, r16901, r16902, r16903, r16904, r16905, r16906;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r16900, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r16901, "0", 10, MPFR_RNDN);
        mpfr_init(r16902);
        mpfr_init(r16903);
        mpfr_init(r16904);
        mpfr_init(r16905);
        mpfr_init(r16906);
}

double f_fm(double N) {
        ;
        ;
        mpfr_sub(r16902, r16900, r16901, MPFR_RNDN);
        mpfr_set_d(r16903, N, MPFR_RNDN);
        mpfr_add(r16904, r16900, r16903, MPFR_RNDN);
        mpfr_fma(r16905, r16903, r16904, r16900, MPFR_RNDN);
        mpfr_atan2(r16906, r16902, r16905, MPFR_RNDN);
        return mpfr_get_d(r16906, MPFR_RNDN);
}

static mpfr_t r16907, r16908, r16909, r16910, r16911, r16912, r16913;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r16907, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r16908, "0", 10, MPFR_RNDN);
        mpfr_init(r16909);
        mpfr_init(r16910);
        mpfr_init(r16911);
        mpfr_init(r16912);
        mpfr_init(r16913);
}

double f_dm(double N) {
        ;
        ;
        mpfr_sub(r16909, r16907, r16908, MPFR_RNDN);
        mpfr_set_d(r16910, N, MPFR_RNDN);
        mpfr_add(r16911, r16907, r16910, MPFR_RNDN);
        mpfr_fma(r16912, r16910, r16911, r16907, MPFR_RNDN);
        mpfr_atan2(r16913, r16909, r16912, MPFR_RNDN);
        return mpfr_get_d(r16913, MPFR_RNDN);
}

