#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 r5041871 = 1.0f;
        float r5041872 = x;
        float r5041873 = r5041871 - r5041872;
        float r5041874 = log(r5041873);
        float r5041875 = r5041871 + r5041872;
        float r5041876 = log(r5041875);
        float r5041877 = r5041874 / r5041876;
        return r5041877;
}

double f_id(double x) {
        double r5041878 = 1.0;
        double r5041879 = x;
        double r5041880 = r5041878 - r5041879;
        double r5041881 = log(r5041880);
        double r5041882 = r5041878 + r5041879;
        double r5041883 = log(r5041882);
        double r5041884 = r5041881 / r5041883;
        return r5041884;
}


double f_of(float x) {
        float r5041885 = 0.5f;
        float r5041886 = x;
        float r5041887 = r5041886 * r5041886;
        float r5041888 = r5041885 * r5041887;
        float r5041889 = 1.0f;
        float r5041890 = r5041889 + r5041886;
        float r5041891 = r5041888 + r5041890;
        float r5041892 = -r5041891;
        return r5041892;
}

double f_od(double x) {
        double r5041893 = 0.5;
        double r5041894 = x;
        double r5041895 = r5041894 * r5041894;
        double r5041896 = r5041893 * r5041895;
        double r5041897 = 1.0;
        double r5041898 = r5041897 + r5041894;
        double r5041899 = r5041896 + r5041898;
        double r5041900 = -r5041899;
        return r5041900;
}

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 r5041901, r5041902, r5041903, r5041904, r5041905, r5041906, r5041907;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041901, "1", 10, MPFR_RNDN);
        mpfr_init(r5041902);
        mpfr_init(r5041903);
        mpfr_init(r5041904);
        mpfr_init(r5041905);
        mpfr_init(r5041906);
        mpfr_init(r5041907);
}

double f_im(double x) {
        ;
        mpfr_set_d(r5041902, x, MPFR_RNDN);
        mpfr_sub(r5041903, r5041901, r5041902, MPFR_RNDN);
        mpfr_log(r5041904, r5041903, MPFR_RNDN);
        mpfr_add(r5041905, r5041901, r5041902, MPFR_RNDN);
        mpfr_log(r5041906, r5041905, MPFR_RNDN);
        mpfr_div(r5041907, r5041904, r5041906, MPFR_RNDN);
        return mpfr_get_d(r5041907, MPFR_RNDN);
}

static mpfr_t r5041908, r5041909, r5041910, r5041911, r5041912, r5041913, r5041914, r5041915;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041908, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5041909);
        mpfr_init(r5041910);
        mpfr_init(r5041911);
        mpfr_init_set_str(r5041912, "1", 10, MPFR_RNDN);
        mpfr_init(r5041913);
        mpfr_init(r5041914);
        mpfr_init(r5041915);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r5041909, x, MPFR_RNDN);
        mpfr_sqr(r5041910, r5041909, MPFR_RNDN);
        mpfr_mul(r5041911, r5041908, r5041910, MPFR_RNDN);
        ;
        mpfr_add(r5041913, r5041912, r5041909, MPFR_RNDN);
        mpfr_add(r5041914, r5041911, r5041913, MPFR_RNDN);
        mpfr_neg(r5041915, r5041914, MPFR_RNDN);
        return mpfr_get_d(r5041915, MPFR_RNDN);
}

static mpfr_t r5041916, r5041917, r5041918, r5041919, r5041920, r5041921, r5041922, r5041923;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init_set_str(r5041916, "1/2", 10, MPFR_RNDN);
        mpfr_init(r5041917);
        mpfr_init(r5041918);
        mpfr_init(r5041919);
        mpfr_init_set_str(r5041920, "1", 10, MPFR_RNDN);
        mpfr_init(r5041921);
        mpfr_init(r5041922);
        mpfr_init(r5041923);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r5041917, x, MPFR_RNDN);
        mpfr_sqr(r5041918, r5041917, MPFR_RNDN);
        mpfr_mul(r5041919, r5041916, r5041918, MPFR_RNDN);
        ;
        mpfr_add(r5041921, r5041920, r5041917, MPFR_RNDN);
        mpfr_add(r5041922, r5041919, r5041921, MPFR_RNDN);
        mpfr_neg(r5041923, r5041922, MPFR_RNDN);
        return mpfr_get_d(r5041923, MPFR_RNDN);
}

