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

char *name = "NMSE example 3.10";

double f_if(float x) {
        float r4775989 = 1.0f;
        float r4775990 = x;
        float r4775991 = r4775989 - r4775990;
        float r4775992 = log(r4775991);
        float r4775993 = r4775989 + r4775990;
        float r4775994 = log(r4775993);
        float r4775995 = r4775992 / r4775994;
        return r4775995;
}

double f_id(double x) {
        double r4775996 = 1.0;
        double r4775997 = x;
        double r4775998 = r4775996 - r4775997;
        double r4775999 = log(r4775998);
        double r4776000 = r4775996 + r4775997;
        double r4776001 = log(r4776000);
        double r4776002 = r4775999 / r4776001;
        return r4776002;
}


double f_of(float x) {
        float r4776003 = 0.5f;
        float r4776004 = x;
        float r4776005 = r4776004 * r4776004;
        float r4776006 = r4776003 * r4776005;
        float r4776007 = 1.0f;
        float r4776008 = r4776007 + r4776004;
        float r4776009 = r4776006 + r4776008;
        float r4776010 = -r4776009;
        return r4776010;
}

double f_od(double x) {
        double r4776011 = 0.5;
        double r4776012 = x;
        double r4776013 = r4776012 * r4776012;
        double r4776014 = r4776011 * r4776013;
        double r4776015 = 1.0;
        double r4776016 = r4776015 + r4776012;
        double r4776017 = r4776014 + r4776016;
        double r4776018 = -r4776017;
        return r4776018;
}

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 r4776019, r4776020, r4776021, r4776022, r4776023, r4776024, r4776025;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4776019, "1", 10, MPFR_RNDN);
        mpfr_init(r4776020);
        mpfr_init(r4776021);
        mpfr_init(r4776022);
        mpfr_init(r4776023);
        mpfr_init(r4776024);
        mpfr_init(r4776025);
}

double f_im(double x) {
        ;
        mpfr_set_d(r4776020, x, MPFR_RNDN);
        mpfr_sub(r4776021, r4776019, r4776020, MPFR_RNDN);
        mpfr_log(r4776022, r4776021, MPFR_RNDN);
        mpfr_add(r4776023, r4776019, r4776020, MPFR_RNDN);
        mpfr_log(r4776024, r4776023, MPFR_RNDN);
        mpfr_div(r4776025, r4776022, r4776024, MPFR_RNDN);
        return mpfr_get_d(r4776025, MPFR_RNDN);
}

static mpfr_t r4776026, r4776027, r4776028, r4776029, r4776030, r4776031, r4776032, r4776033;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4776026, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4776027);
        mpfr_init(r4776028);
        mpfr_init(r4776029);
        mpfr_init_set_str(r4776030, "1", 10, MPFR_RNDN);
        mpfr_init(r4776031);
        mpfr_init(r4776032);
        mpfr_init(r4776033);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r4776027, x, MPFR_RNDN);
        mpfr_sqr(r4776028, r4776027, MPFR_RNDN);
        mpfr_mul(r4776029, r4776026, r4776028, MPFR_RNDN);
        ;
        mpfr_add(r4776031, r4776030, r4776027, MPFR_RNDN);
        mpfr_add(r4776032, r4776029, r4776031, MPFR_RNDN);
        mpfr_neg(r4776033, r4776032, MPFR_RNDN);
        return mpfr_get_d(r4776033, MPFR_RNDN);
}

static mpfr_t r4776034, r4776035, r4776036, r4776037, r4776038, r4776039, r4776040, r4776041;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r4776034, "1/2", 10, MPFR_RNDN);
        mpfr_init(r4776035);
        mpfr_init(r4776036);
        mpfr_init(r4776037);
        mpfr_init_set_str(r4776038, "1", 10, MPFR_RNDN);
        mpfr_init(r4776039);
        mpfr_init(r4776040);
        mpfr_init(r4776041);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r4776035, x, MPFR_RNDN);
        mpfr_sqr(r4776036, r4776035, MPFR_RNDN);
        mpfr_mul(r4776037, r4776034, r4776036, MPFR_RNDN);
        ;
        mpfr_add(r4776039, r4776038, r4776035, MPFR_RNDN);
        mpfr_add(r4776040, r4776037, r4776039, MPFR_RNDN);
        mpfr_neg(r4776041, r4776040, MPFR_RNDN);
        return mpfr_get_d(r4776041, MPFR_RNDN);
}

