#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 r16860 = N;
        float r16861 = 1.0f;
        float r16862 = r16860 + r16861;
        float r16863 = atan(r16862);
        float r16864 = atan(r16860);
        float r16865 = r16863 - r16864;
        return r16865;
}

double f_id(double N) {
        double r16866 = N;
        double r16867 = 1.0;
        double r16868 = r16866 + r16867;
        double r16869 = atan(r16868);
        double r16870 = atan(r16866);
        double r16871 = r16869 - r16870;
        return r16871;
}


double f_of(float N) {
        float r16872 = 1.0f;
        float r16873 = 0.0f;
        float r16874 = r16872 - r16873;
        float r16875 = N;
        float r16876 = r16872 + r16875;
        float r16877 = fma(r16875, r16876, r16872);
        float r16878 = atan2(r16874, r16877);
        return r16878;
}

double f_od(double N) {
        double r16879 = 1.0;
        double r16880 = 0.0;
        double r16881 = r16879 - r16880;
        double r16882 = N;
        double r16883 = r16879 + r16882;
        double r16884 = fma(r16882, r16883, r16879);
        double r16885 = atan2(r16881, r16884);
        return r16885;
}

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 r16886, r16887, r16888, r16889, r16890, r16891;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r16886);
        mpfr_init_set_str(r16887, "1", 10, MPFR_RNDN);
        mpfr_init(r16888);
        mpfr_init(r16889);
        mpfr_init(r16890);
        mpfr_init(r16891);
}

double f_im(double N) {
        mpfr_set_d(r16886, N, MPFR_RNDN);
        ;
        mpfr_add(r16888, r16886, r16887, MPFR_RNDN);
        mpfr_atan(r16889, r16888, MPFR_RNDN);
        mpfr_atan(r16890, r16886, MPFR_RNDN);
        mpfr_sub(r16891, r16889, r16890, MPFR_RNDN);
        return mpfr_get_d(r16891, MPFR_RNDN);
}

static mpfr_t r16892, r16893, r16894, r16895, r16896, r16897, r16898;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r16892, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r16893, "0", 10, MPFR_RNDN);
        mpfr_init(r16894);
        mpfr_init(r16895);
        mpfr_init(r16896);
        mpfr_init(r16897);
        mpfr_init(r16898);
}

double f_fm(double N) {
        ;
        ;
        mpfr_sub(r16894, r16892, r16893, MPFR_RNDN);
        mpfr_set_d(r16895, N, MPFR_RNDN);
        mpfr_add(r16896, r16892, r16895, MPFR_RNDN);
        mpfr_fma(r16897, r16895, r16896, r16892, MPFR_RNDN);
        mpfr_atan2(r16898, r16894, r16897, MPFR_RNDN);
        return mpfr_get_d(r16898, MPFR_RNDN);
}

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

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

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

