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

char *name = "NMSE Section 6.1 mentioned, B";

double f_if(float a, float b) {
        float r28006 = atan2(1.0, 0.0);
        float r28007 = 2;
        float r28008 = r28006 / r28007;
        float r28009 = 1;
        float r28010 = b;
        float r28011 = r28010 * r28010;
        float r28012 = a;
        float r28013 = r28012 * r28012;
        float r28014 = r28011 - r28013;
        float r28015 = r28009 / r28014;
        float r28016 = r28008 * r28015;
        float r28017 = r28009 / r28012;
        float r28018 = r28009 / r28010;
        float r28019 = r28017 - r28018;
        float r28020 = r28016 * r28019;
        return r28020;
}

double f_id(double a, double b) {
        double r28021 = atan2(1.0, 0.0);
        double r28022 = 2;
        double r28023 = r28021 / r28022;
        double r28024 = 1;
        double r28025 = b;
        double r28026 = r28025 * r28025;
        double r28027 = a;
        double r28028 = r28027 * r28027;
        double r28029 = r28026 - r28028;
        double r28030 = r28024 / r28029;
        double r28031 = r28023 * r28030;
        double r28032 = r28024 / r28027;
        double r28033 = r28024 / r28025;
        double r28034 = r28032 - r28033;
        double r28035 = r28031 * r28034;
        return r28035;
}


double f_of(float a, float b) {
        float r28036 = atan2(1.0, 0.0);
        float r28037 = 2;
        float r28038 = r28036 / r28037;
        float r28039 = b;
        float r28040 = a;
        float r28041 = r28039 + r28040;
        float r28042 = r28038 / r28041;
        float r28043 = 1;
        float r28044 = r28040 * r28039;
        float r28045 = r28043 / r28044;
        float r28046 = r28042 * r28045;
        return r28046;
}

double f_od(double a, double b) {
        double r28047 = atan2(1.0, 0.0);
        double r28048 = 2;
        double r28049 = r28047 / r28048;
        double r28050 = b;
        double r28051 = a;
        double r28052 = r28050 + r28051;
        double r28053 = r28049 / r28052;
        double r28054 = 1;
        double r28055 = r28051 * r28050;
        double r28056 = r28054 / r28055;
        double r28057 = r28053 * r28056;
        return r28057;
}

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 r28058, r28059, r28060, r28061, r28062, r28063, r28064, r28065, r28066, r28067, r28068, r28069, r28070, r28071, r28072;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28058);
        mpfr_init_set_str(r28059, "2", 10, MPFR_RNDN);
        mpfr_init(r28060);
        mpfr_init_set_str(r28061, "1", 10, MPFR_RNDN);
        mpfr_init(r28062);
        mpfr_init(r28063);
        mpfr_init(r28064);
        mpfr_init(r28065);
        mpfr_init(r28066);
        mpfr_init(r28067);
        mpfr_init(r28068);
        mpfr_init(r28069);
        mpfr_init(r28070);
        mpfr_init(r28071);
        mpfr_init(r28072);
}

double f_im(double a, double b) {
        mpfr_const_pi(r28058, MPFR_RNDN);
        ;
        mpfr_div(r28060, r28058, r28059, MPFR_RNDN);
        ;
        mpfr_set_d(r28062, b, MPFR_RNDN);
        mpfr_mul(r28063, r28062, r28062, MPFR_RNDN);
        mpfr_set_d(r28064, a, MPFR_RNDN);
        mpfr_mul(r28065, r28064, r28064, MPFR_RNDN);
        mpfr_sub(r28066, r28063, r28065, MPFR_RNDN);
        mpfr_div(r28067, r28061, r28066, MPFR_RNDN);
        mpfr_mul(r28068, r28060, r28067, MPFR_RNDN);
        mpfr_div(r28069, r28061, r28064, MPFR_RNDN);
        mpfr_div(r28070, r28061, r28062, MPFR_RNDN);
        mpfr_sub(r28071, r28069, r28070, MPFR_RNDN);
        mpfr_mul(r28072, r28068, r28071, MPFR_RNDN);
        return mpfr_get_d(r28072, MPFR_RNDN);
}

static mpfr_t r28073, r28074, r28075, r28076, r28077, r28078, r28079, r28080, r28081, r28082, r28083;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28073);
        mpfr_init_set_str(r28074, "2", 10, MPFR_RNDN);
        mpfr_init(r28075);
        mpfr_init(r28076);
        mpfr_init(r28077);
        mpfr_init(r28078);
        mpfr_init(r28079);
        mpfr_init_set_str(r28080, "1", 10, MPFR_RNDN);
        mpfr_init(r28081);
        mpfr_init(r28082);
        mpfr_init(r28083);
}

double f_fm(double a, double b) {
        mpfr_const_pi(r28073, MPFR_RNDN);
        ;
        mpfr_div(r28075, r28073, r28074, MPFR_RNDN);
        mpfr_set_d(r28076, b, MPFR_RNDN);
        mpfr_set_d(r28077, a, MPFR_RNDN);
        mpfr_add(r28078, r28076, r28077, MPFR_RNDN);
        mpfr_div(r28079, r28075, r28078, MPFR_RNDN);
        ;
        mpfr_mul(r28081, r28077, r28076, MPFR_RNDN);
        mpfr_div(r28082, r28080, r28081, MPFR_RNDN);
        mpfr_mul(r28083, r28079, r28082, MPFR_RNDN);
        return mpfr_get_d(r28083, MPFR_RNDN);
}

static mpfr_t r28084, r28085, r28086, r28087, r28088, r28089, r28090, r28091, r28092, r28093, r28094;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28084);
        mpfr_init_set_str(r28085, "2", 10, MPFR_RNDN);
        mpfr_init(r28086);
        mpfr_init(r28087);
        mpfr_init(r28088);
        mpfr_init(r28089);
        mpfr_init(r28090);
        mpfr_init_set_str(r28091, "1", 10, MPFR_RNDN);
        mpfr_init(r28092);
        mpfr_init(r28093);
        mpfr_init(r28094);
}

double f_dm(double a, double b) {
        mpfr_const_pi(r28084, MPFR_RNDN);
        ;
        mpfr_div(r28086, r28084, r28085, MPFR_RNDN);
        mpfr_set_d(r28087, b, MPFR_RNDN);
        mpfr_set_d(r28088, a, MPFR_RNDN);
        mpfr_add(r28089, r28087, r28088, MPFR_RNDN);
        mpfr_div(r28090, r28086, r28089, MPFR_RNDN);
        ;
        mpfr_mul(r28092, r28088, r28087, MPFR_RNDN);
        mpfr_div(r28093, r28091, r28092, MPFR_RNDN);
        mpfr_mul(r28094, r28090, r28093, MPFR_RNDN);
        return mpfr_get_d(r28094, MPFR_RNDN);
}

