#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 r16856 = N;
        float r16857 = 1.0f;
        float r16858 = r16856 + r16857;
        float r16859 = atan(r16858);
        float r16860 = atan(r16856);
        float r16861 = r16859 - r16860;
        return r16861;
}

double f_id(double N) {
        double r16862 = N;
        double r16863 = 1.0;
        double r16864 = r16862 + r16863;
        double r16865 = atan(r16864);
        double r16866 = atan(r16862);
        double r16867 = r16865 - r16866;
        return r16867;
}


double f_of(float N) {
        float r16868 = 1.0f;
        float r16869 = 0.0f;
        float r16870 = r16868 - r16869;
        float r16871 = N;
        float r16872 = r16868 + r16871;
        float r16873 = fma(r16871, r16872, r16868);
        float r16874 = atan2(r16870, r16873);
        return r16874;
}

double f_od(double N) {
        double r16875 = 1.0;
        double r16876 = 0.0;
        double r16877 = r16875 - r16876;
        double r16878 = N;
        double r16879 = r16875 + r16878;
        double r16880 = fma(r16878, r16879, r16875);
        double r16881 = atan2(r16877, r16880);
        return r16881;
}

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 r16882, r16883, r16884, r16885, r16886, r16887;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r16882);
        mpfr_init_set_str(r16883, "1", 10, MPFR_RNDN);
        mpfr_init(r16884);
        mpfr_init(r16885);
        mpfr_init(r16886);
        mpfr_init(r16887);
}

double f_im(double N) {
        mpfr_set_d(r16882, N, MPFR_RNDN);
        ;
        mpfr_add(r16884, r16882, r16883, MPFR_RNDN);
        mpfr_atan(r16885, r16884, MPFR_RNDN);
        mpfr_atan(r16886, r16882, MPFR_RNDN);
        mpfr_sub(r16887, r16885, r16886, MPFR_RNDN);
        return mpfr_get_d(r16887, MPFR_RNDN);
}

static mpfr_t r16888, r16889, r16890, r16891, r16892, r16893, r16894;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r16888, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r16889, "0", 10, MPFR_RNDN);
        mpfr_init(r16890);
        mpfr_init(r16891);
        mpfr_init(r16892);
        mpfr_init(r16893);
        mpfr_init(r16894);
}

double f_fm(double N) {
        ;
        ;
        mpfr_sub(r16890, r16888, r16889, MPFR_RNDN);
        mpfr_set_d(r16891, N, MPFR_RNDN);
        mpfr_add(r16892, r16888, r16891, MPFR_RNDN);
        mpfr_fma(r16893, r16891, r16892, r16888, MPFR_RNDN);
        mpfr_atan2(r16894, r16890, r16893, MPFR_RNDN);
        return mpfr_get_d(r16894, MPFR_RNDN);
}

static mpfr_t r16895, r16896, r16897, r16898, r16899, r16900, r16901;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r16895, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r16896, "0", 10, MPFR_RNDN);
        mpfr_init(r16897);
        mpfr_init(r16898);
        mpfr_init(r16899);
        mpfr_init(r16900);
        mpfr_init(r16901);
}

double f_dm(double N) {
        ;
        ;
        mpfr_sub(r16897, r16895, r16896, MPFR_RNDN);
        mpfr_set_d(r16898, N, MPFR_RNDN);
        mpfr_add(r16899, r16895, r16898, MPFR_RNDN);
        mpfr_fma(r16900, r16898, r16899, r16895, MPFR_RNDN);
        mpfr_atan2(r16901, r16897, r16900, MPFR_RNDN);
        return mpfr_get_d(r16901, MPFR_RNDN);
}

