#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 r27986 = atan2(1.0, 0.0);
        float r27987 = 2;
        float r27988 = r27986 / r27987;
        float r27989 = 1;
        float r27990 = b;
        float r27991 = r27990 * r27990;
        float r27992 = a;
        float r27993 = r27992 * r27992;
        float r27994 = r27991 - r27993;
        float r27995 = r27989 / r27994;
        float r27996 = r27988 * r27995;
        float r27997 = r27989 / r27992;
        float r27998 = r27989 / r27990;
        float r27999 = r27997 - r27998;
        float r28000 = r27996 * r27999;
        return r28000;
}

double f_id(double a, double b) {
        double r28001 = atan2(1.0, 0.0);
        double r28002 = 2;
        double r28003 = r28001 / r28002;
        double r28004 = 1;
        double r28005 = b;
        double r28006 = r28005 * r28005;
        double r28007 = a;
        double r28008 = r28007 * r28007;
        double r28009 = r28006 - r28008;
        double r28010 = r28004 / r28009;
        double r28011 = r28003 * r28010;
        double r28012 = r28004 / r28007;
        double r28013 = r28004 / r28005;
        double r28014 = r28012 - r28013;
        double r28015 = r28011 * r28014;
        return r28015;
}


double f_of(float a, float b) {
        float r28016 = atan2(1.0, 0.0);
        float r28017 = 2;
        float r28018 = r28016 / r28017;
        float r28019 = b;
        float r28020 = a;
        float r28021 = r28019 + r28020;
        float r28022 = r28018 / r28021;
        float r28023 = 1;
        float r28024 = r28020 * r28019;
        float r28025 = r28023 / r28024;
        float r28026 = r28022 * r28025;
        return r28026;
}

double f_od(double a, double b) {
        double r28027 = atan2(1.0, 0.0);
        double r28028 = 2;
        double r28029 = r28027 / r28028;
        double r28030 = b;
        double r28031 = a;
        double r28032 = r28030 + r28031;
        double r28033 = r28029 / r28032;
        double r28034 = 1;
        double r28035 = r28031 * r28030;
        double r28036 = r28034 / r28035;
        double r28037 = r28033 * r28036;
        return r28037;
}

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 r28038, r28039, r28040, r28041, r28042, r28043, r28044, r28045, r28046, r28047, r28048, r28049, r28050, r28051, r28052;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28038);
        mpfr_init_set_str(r28039, "2", 10, MPFR_RNDN);
        mpfr_init(r28040);
        mpfr_init_set_str(r28041, "1", 10, MPFR_RNDN);
        mpfr_init(r28042);
        mpfr_init(r28043);
        mpfr_init(r28044);
        mpfr_init(r28045);
        mpfr_init(r28046);
        mpfr_init(r28047);
        mpfr_init(r28048);
        mpfr_init(r28049);
        mpfr_init(r28050);
        mpfr_init(r28051);
        mpfr_init(r28052);
}

double f_im(double a, double b) {
        mpfr_const_pi(r28038, MPFR_RNDN);
        ;
        mpfr_div(r28040, r28038, r28039, MPFR_RNDN);
        ;
        mpfr_set_d(r28042, b, MPFR_RNDN);
        mpfr_mul(r28043, r28042, r28042, MPFR_RNDN);
        mpfr_set_d(r28044, a, MPFR_RNDN);
        mpfr_mul(r28045, r28044, r28044, MPFR_RNDN);
        mpfr_sub(r28046, r28043, r28045, MPFR_RNDN);
        mpfr_div(r28047, r28041, r28046, MPFR_RNDN);
        mpfr_mul(r28048, r28040, r28047, MPFR_RNDN);
        mpfr_div(r28049, r28041, r28044, MPFR_RNDN);
        mpfr_div(r28050, r28041, r28042, MPFR_RNDN);
        mpfr_sub(r28051, r28049, r28050, MPFR_RNDN);
        mpfr_mul(r28052, r28048, r28051, MPFR_RNDN);
        return mpfr_get_d(r28052, MPFR_RNDN);
}

static mpfr_t r28053, r28054, r28055, r28056, r28057, r28058, r28059, r28060, r28061, r28062, r28063;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28053);
        mpfr_init_set_str(r28054, "2", 10, MPFR_RNDN);
        mpfr_init(r28055);
        mpfr_init(r28056);
        mpfr_init(r28057);
        mpfr_init(r28058);
        mpfr_init(r28059);
        mpfr_init_set_str(r28060, "1", 10, MPFR_RNDN);
        mpfr_init(r28061);
        mpfr_init(r28062);
        mpfr_init(r28063);
}

double f_fm(double a, double b) {
        mpfr_const_pi(r28053, MPFR_RNDN);
        ;
        mpfr_div(r28055, r28053, r28054, MPFR_RNDN);
        mpfr_set_d(r28056, b, MPFR_RNDN);
        mpfr_set_d(r28057, a, MPFR_RNDN);
        mpfr_add(r28058, r28056, r28057, MPFR_RNDN);
        mpfr_div(r28059, r28055, r28058, MPFR_RNDN);
        ;
        mpfr_mul(r28061, r28057, r28056, MPFR_RNDN);
        mpfr_div(r28062, r28060, r28061, MPFR_RNDN);
        mpfr_mul(r28063, r28059, r28062, MPFR_RNDN);
        return mpfr_get_d(r28063, MPFR_RNDN);
}

static mpfr_t r28064, r28065, r28066, r28067, r28068, r28069, r28070, r28071, r28072, r28073, r28074;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28064);
        mpfr_init_set_str(r28065, "2", 10, MPFR_RNDN);
        mpfr_init(r28066);
        mpfr_init(r28067);
        mpfr_init(r28068);
        mpfr_init(r28069);
        mpfr_init(r28070);
        mpfr_init_set_str(r28071, "1", 10, MPFR_RNDN);
        mpfr_init(r28072);
        mpfr_init(r28073);
        mpfr_init(r28074);
}

double f_dm(double a, double b) {
        mpfr_const_pi(r28064, MPFR_RNDN);
        ;
        mpfr_div(r28066, r28064, r28065, MPFR_RNDN);
        mpfr_set_d(r28067, b, MPFR_RNDN);
        mpfr_set_d(r28068, a, MPFR_RNDN);
        mpfr_add(r28069, r28067, r28068, MPFR_RNDN);
        mpfr_div(r28070, r28066, r28069, MPFR_RNDN);
        ;
        mpfr_mul(r28072, r28068, r28067, MPFR_RNDN);
        mpfr_div(r28073, r28071, r28072, MPFR_RNDN);
        mpfr_mul(r28074, r28070, r28073, MPFR_RNDN);
        return mpfr_get_d(r28074, MPFR_RNDN);
}

