#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 r5041411 = 1.0f;
        float r5041412 = x;
        float r5041413 = r5041411 / r5041412;
        float r5041414 = 1.0 / tan(r5041412);
        float r5041415 = r5041413 - r5041414;
        return r5041415;
}

double f_id(double x) {
        double r5041416 = 1.0;
        double r5041417 = x;
        double r5041418 = r5041416 / r5041417;
        double r5041419 = 1.0 / tan(r5041417);
        double r5041420 = r5041418 - r5041419;
        return r5041420;
}


double f_of(float x) {
        float r5041421 = 0.022222222222222223f;
        float r5041422 = x;
        float r5041423 = r5041422 * (r5041422 * r5041422);
        float r5041424 = r5041421 * r5041423;
        float r5041425 = 5.0f;
        float r5041426 = pow(r5041422, r5041425);
        float r5041427 = 0.0021164021164021165f;
        float r5041428 = r5041426 * r5041427;
        float r5041429 = 0.3333333333333333f;
        float r5041430 = r5041422 * r5041429;
        float r5041431 = r5041428 + r5041430;
        float r5041432 = r5041424 + r5041431;
        return r5041432;
}

double f_od(double x) {
        double r5041433 = 0.022222222222222223;
        double r5041434 = x;
        double r5041435 = r5041434 * (r5041434 * r5041434);
        double r5041436 = r5041433 * r5041435;
        double r5041437 = 5.0;
        double r5041438 = pow(r5041434, r5041437);
        double r5041439 = 0.0021164021164021165;
        double r5041440 = r5041438 * r5041439;
        double r5041441 = 0.3333333333333333;
        double r5041442 = r5041434 * r5041441;
        double r5041443 = r5041440 + r5041442;
        double r5041444 = r5041436 + r5041443;
        return r5041444;
}

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 r5041445, r5041446, r5041447, r5041448, r5041449;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041445, "1", 10, MPFR_RNDN);
        mpfr_init(r5041446);
        mpfr_init(r5041447);
        mpfr_init(r5041448);
        mpfr_init(r5041449);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5041446, x, MPFR_RNDN);
        mpfr_div(r5041447, r5041445, r5041446, MPFR_RNDN);
        mpfr_cot(r5041448, r5041446, MPFR_RNDN);
        mpfr_sub(r5041449, r5041447, r5041448, MPFR_RNDN);
        return mpfr_get_d(r5041449, MPFR_RNDN);
}

static mpfr_t r5041450, r5041451, r5041452, r5041453, r5041454, r5041455, r5041456, r5041457, r5041458, r5041459, r5041460, r5041461;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041450, "1/45", 10, MPFR_RNDN);
        mpfr_init(r5041451);
        mpfr_init(r5041452);
        mpfr_init(r5041453);
        mpfr_init_set_str(r5041454, "5", 10, MPFR_RNDN);
        mpfr_init(r5041455);
        mpfr_init_set_str(r5041456, "2/945", 10, MPFR_RNDN);
        mpfr_init(r5041457);
        mpfr_init_set_str(r5041458, "1/3", 10, MPFR_RNDN);
        mpfr_init(r5041459);
        mpfr_init(r5041460);
        mpfr_init(r5041461);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5041451, x, MPFR_RNDN);
        mpfr_mul(r5041452, r5041451, r5041451, MPFR_RNDN); mpfr_mul(r5041452, r5041452, r5041451, MPFR_RNDN);
        mpfr_mul(r5041453, r5041450, r5041452, MPFR_RNDN);
        ;
        mpfr_pow(r5041455, r5041451, r5041454, MPFR_RNDN);
        ;
        mpfr_mul(r5041457, r5041455, r5041456, MPFR_RNDN);
        ;
        mpfr_mul(r5041459, r5041451, r5041458, MPFR_RNDN);
        mpfr_add(r5041460, r5041457, r5041459, MPFR_RNDN);
        mpfr_add(r5041461, r5041453, r5041460, MPFR_RNDN);
        return mpfr_get_d(r5041461, MPFR_RNDN);
}

static mpfr_t r5041462, r5041463, r5041464, r5041465, r5041466, r5041467, r5041468, r5041469, r5041470, r5041471, r5041472, r5041473;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041462, "1/45", 10, MPFR_RNDN);
        mpfr_init(r5041463);
        mpfr_init(r5041464);
        mpfr_init(r5041465);
        mpfr_init_set_str(r5041466, "5", 10, MPFR_RNDN);
        mpfr_init(r5041467);
        mpfr_init_set_str(r5041468, "2/945", 10, MPFR_RNDN);
        mpfr_init(r5041469);
        mpfr_init_set_str(r5041470, "1/3", 10, MPFR_RNDN);
        mpfr_init(r5041471);
        mpfr_init(r5041472);
        mpfr_init(r5041473);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5041463, x, MPFR_RNDN);
        mpfr_mul(r5041464, r5041463, r5041463, MPFR_RNDN); mpfr_mul(r5041464, r5041464, r5041463, MPFR_RNDN);
        mpfr_mul(r5041465, r5041462, r5041464, MPFR_RNDN);
        ;
        mpfr_pow(r5041467, r5041463, r5041466, MPFR_RNDN);
        ;
        mpfr_mul(r5041469, r5041467, r5041468, MPFR_RNDN);
        ;
        mpfr_mul(r5041471, r5041463, r5041470, MPFR_RNDN);
        mpfr_add(r5041472, r5041469, r5041471, MPFR_RNDN);
        mpfr_add(r5041473, r5041465, r5041472, MPFR_RNDN);
        return mpfr_get_d(r5041473, MPFR_RNDN);
}

