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

char *name = "NMSE example 3.9";

double f_if(float x) {
        float r5320511 = 1.0f;
        float r5320512 = x;
        float r5320513 = r5320511 / r5320512;
        float r5320514 = 1.0 / tan(r5320512);
        float r5320515 = r5320513 - r5320514;
        return r5320515;
}

double f_id(double x) {
        double r5320516 = 1.0;
        double r5320517 = x;
        double r5320518 = r5320516 / r5320517;
        double r5320519 = 1.0 / tan(r5320517);
        double r5320520 = r5320518 - r5320519;
        return r5320520;
}


double f_of(float x) {
        float r5320521 = 0.022222222222222223f;
        float r5320522 = x;
        float r5320523 = r5320522 * (r5320522 * r5320522);
        float r5320524 = r5320521 * r5320523;
        float r5320525 = 5.0f;
        float r5320526 = pow(r5320522, r5320525);
        float r5320527 = 0.0021164021164021165f;
        float r5320528 = r5320526 * r5320527;
        float r5320529 = 0.3333333333333333f;
        float r5320530 = r5320522 * r5320529;
        float r5320531 = r5320528 + r5320530;
        float r5320532 = r5320524 + r5320531;
        return r5320532;
}

double f_od(double x) {
        double r5320533 = 0.022222222222222223;
        double r5320534 = x;
        double r5320535 = r5320534 * (r5320534 * r5320534);
        double r5320536 = r5320533 * r5320535;
        double r5320537 = 5.0;
        double r5320538 = pow(r5320534, r5320537);
        double r5320539 = 0.0021164021164021165;
        double r5320540 = r5320538 * r5320539;
        double r5320541 = 0.3333333333333333;
        double r5320542 = r5320534 * r5320541;
        double r5320543 = r5320540 + r5320542;
        double r5320544 = r5320536 + r5320543;
        return r5320544;
}

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 r5320545, r5320546, r5320547, r5320548, r5320549;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5320545, "1", 10, MPFR_RNDN);
        mpfr_init(r5320546);
        mpfr_init(r5320547);
        mpfr_init(r5320548);
        mpfr_init(r5320549);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5320546, x, MPFR_RNDN);
        mpfr_div(r5320547, r5320545, r5320546, MPFR_RNDN);
        mpfr_cot(r5320548, r5320546, MPFR_RNDN);
        mpfr_sub(r5320549, r5320547, r5320548, MPFR_RNDN);
        return mpfr_get_d(r5320549, MPFR_RNDN);
}

static mpfr_t r5320550, r5320551, r5320552, r5320553, r5320554, r5320555, r5320556, r5320557, r5320558, r5320559, r5320560, r5320561;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5320550, "1/45", 10, MPFR_RNDN);
        mpfr_init(r5320551);
        mpfr_init(r5320552);
        mpfr_init(r5320553);
        mpfr_init_set_str(r5320554, "5", 10, MPFR_RNDN);
        mpfr_init(r5320555);
        mpfr_init_set_str(r5320556, "2/945", 10, MPFR_RNDN);
        mpfr_init(r5320557);
        mpfr_init_set_str(r5320558, "1/3", 10, MPFR_RNDN);
        mpfr_init(r5320559);
        mpfr_init(r5320560);
        mpfr_init(r5320561);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5320551, x, MPFR_RNDN);
        mpfr_mul(r5320552, r5320551, r5320551, MPFR_RNDN); mpfr_mul(r5320552, r5320552, r5320551, MPFR_RNDN);
        mpfr_mul(r5320553, r5320550, r5320552, MPFR_RNDN);
        ;
        mpfr_pow(r5320555, r5320551, r5320554, MPFR_RNDN);
        ;
        mpfr_mul(r5320557, r5320555, r5320556, MPFR_RNDN);
        ;
        mpfr_mul(r5320559, r5320551, r5320558, MPFR_RNDN);
        mpfr_add(r5320560, r5320557, r5320559, MPFR_RNDN);
        mpfr_add(r5320561, r5320553, r5320560, MPFR_RNDN);
        return mpfr_get_d(r5320561, MPFR_RNDN);
}

static mpfr_t r5320562, r5320563, r5320564, r5320565, r5320566, r5320567, r5320568, r5320569, r5320570, r5320571, r5320572, r5320573;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5320562, "1/45", 10, MPFR_RNDN);
        mpfr_init(r5320563);
        mpfr_init(r5320564);
        mpfr_init(r5320565);
        mpfr_init_set_str(r5320566, "5", 10, MPFR_RNDN);
        mpfr_init(r5320567);
        mpfr_init_set_str(r5320568, "2/945", 10, MPFR_RNDN);
        mpfr_init(r5320569);
        mpfr_init_set_str(r5320570, "1/3", 10, MPFR_RNDN);
        mpfr_init(r5320571);
        mpfr_init(r5320572);
        mpfr_init(r5320573);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5320563, x, MPFR_RNDN);
        mpfr_mul(r5320564, r5320563, r5320563, MPFR_RNDN); mpfr_mul(r5320564, r5320564, r5320563, MPFR_RNDN);
        mpfr_mul(r5320565, r5320562, r5320564, MPFR_RNDN);
        ;
        mpfr_pow(r5320567, r5320563, r5320566, MPFR_RNDN);
        ;
        mpfr_mul(r5320569, r5320567, r5320568, MPFR_RNDN);
        ;
        mpfr_mul(r5320571, r5320563, r5320570, MPFR_RNDN);
        mpfr_add(r5320572, r5320569, r5320571, MPFR_RNDN);
        mpfr_add(r5320573, r5320565, r5320572, MPFR_RNDN);
        return mpfr_get_d(r5320573, MPFR_RNDN);
}

