#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 r4775522 = 1.0f;
        float r4775523 = x;
        float r4775524 = r4775522 / r4775523;
        float r4775525 = tan(r4775523);
        float r4775526 = r4775522 / r4775525;
        float r4775527 = r4775524 - r4775526;
        return r4775527;
}

double f_id(double x) {
        double r4775528 = 1.0;
        double r4775529 = x;
        double r4775530 = r4775528 / r4775529;
        double r4775531 = tan(r4775529);
        double r4775532 = r4775528 / r4775531;
        double r4775533 = r4775530 - r4775532;
        return r4775533;
}


double f_of(float x) {
        float r4775534 = 0.022222222222222223f;
        float r4775535 = x;
        float r4775536 = r4775535 * (r4775535 * r4775535);
        float r4775537 = r4775534 * r4775536;
        float r4775538 = 5.0f;
        float r4775539 = pow(r4775535, r4775538);
        float r4775540 = 0.0021164021164021165f;
        float r4775541 = r4775539 * r4775540;
        float r4775542 = 0.3333333333333333f;
        float r4775543 = r4775535 * r4775542;
        float r4775544 = r4775541 + r4775543;
        float r4775545 = r4775537 + r4775544;
        return r4775545;
}

double f_od(double x) {
        double r4775546 = 0.022222222222222223;
        double r4775547 = x;
        double r4775548 = r4775547 * (r4775547 * r4775547);
        double r4775549 = r4775546 * r4775548;
        double r4775550 = 5.0;
        double r4775551 = pow(r4775547, r4775550);
        double r4775552 = 0.0021164021164021165;
        double r4775553 = r4775551 * r4775552;
        double r4775554 = 0.3333333333333333;
        double r4775555 = r4775547 * r4775554;
        double r4775556 = r4775553 + r4775555;
        double r4775557 = r4775549 + r4775556;
        return r4775557;
}

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 r4775558, r4775559, r4775560, r4775561, r4775562, r4775563;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775558, "1", 10, MPFR_RNDN);
        mpfr_init(r4775559);
        mpfr_init(r4775560);
        mpfr_init(r4775561);
        mpfr_init(r4775562);
        mpfr_init(r4775563);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4775559, x, MPFR_RNDN);
        mpfr_div(r4775560, r4775558, r4775559, MPFR_RNDN);
        mpfr_tan(r4775561, r4775559, MPFR_RNDN);
        mpfr_div(r4775562, r4775558, r4775561, MPFR_RNDN);
        mpfr_sub(r4775563, r4775560, r4775562, MPFR_RNDN);
        return mpfr_get_d(r4775563, MPFR_RNDN);
}

static mpfr_t r4775564, r4775565, r4775566, r4775567, r4775568, r4775569, r4775570, r4775571, r4775572, r4775573, r4775574, r4775575;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775564, "1/45", 10, MPFR_RNDN);
        mpfr_init(r4775565);
        mpfr_init(r4775566);
        mpfr_init(r4775567);
        mpfr_init_set_str(r4775568, "5", 10, MPFR_RNDN);
        mpfr_init(r4775569);
        mpfr_init_set_str(r4775570, "2/945", 10, MPFR_RNDN);
        mpfr_init(r4775571);
        mpfr_init_set_str(r4775572, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4775573);
        mpfr_init(r4775574);
        mpfr_init(r4775575);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4775565, x, MPFR_RNDN);
        mpfr_mul(r4775566, r4775565, r4775565, MPFR_RNDN); mpfr_mul(r4775566, r4775566, r4775565, MPFR_RNDN);
        mpfr_mul(r4775567, r4775564, r4775566, MPFR_RNDN);
        ;
        mpfr_pow(r4775569, r4775565, r4775568, MPFR_RNDN);
        ;
        mpfr_mul(r4775571, r4775569, r4775570, MPFR_RNDN);
        ;
        mpfr_mul(r4775573, r4775565, r4775572, MPFR_RNDN);
        mpfr_add(r4775574, r4775571, r4775573, MPFR_RNDN);
        mpfr_add(r4775575, r4775567, r4775574, MPFR_RNDN);
        return mpfr_get_d(r4775575, MPFR_RNDN);
}

static mpfr_t r4775576, r4775577, r4775578, r4775579, r4775580, r4775581, r4775582, r4775583, r4775584, r4775585, r4775586, r4775587;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4775576, "1/45", 10, MPFR_RNDN);
        mpfr_init(r4775577);
        mpfr_init(r4775578);
        mpfr_init(r4775579);
        mpfr_init_set_str(r4775580, "5", 10, MPFR_RNDN);
        mpfr_init(r4775581);
        mpfr_init_set_str(r4775582, "2/945", 10, MPFR_RNDN);
        mpfr_init(r4775583);
        mpfr_init_set_str(r4775584, "1/3", 10, MPFR_RNDN);
        mpfr_init(r4775585);
        mpfr_init(r4775586);
        mpfr_init(r4775587);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4775577, x, MPFR_RNDN);
        mpfr_mul(r4775578, r4775577, r4775577, MPFR_RNDN); mpfr_mul(r4775578, r4775578, r4775577, MPFR_RNDN);
        mpfr_mul(r4775579, r4775576, r4775578, MPFR_RNDN);
        ;
        mpfr_pow(r4775581, r4775577, r4775580, MPFR_RNDN);
        ;
        mpfr_mul(r4775583, r4775581, r4775582, MPFR_RNDN);
        ;
        mpfr_mul(r4775585, r4775577, r4775584, MPFR_RNDN);
        mpfr_add(r4775586, r4775583, r4775585, MPFR_RNDN);
        mpfr_add(r4775587, r4775579, r4775586, MPFR_RNDN);
        return mpfr_get_d(r4775587, MPFR_RNDN);
}

