#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 r28042 = atan2(1.0, 0.0);
        float r28043 = 2;
        float r28044 = r28042 / r28043;
        float r28045 = 1;
        float r28046 = b;
        float r28047 = r28046 * r28046;
        float r28048 = a;
        float r28049 = r28048 * r28048;
        float r28050 = r28047 - r28049;
        float r28051 = r28045 / r28050;
        float r28052 = r28044 * r28051;
        float r28053 = r28045 / r28048;
        float r28054 = r28045 / r28046;
        float r28055 = r28053 - r28054;
        float r28056 = r28052 * r28055;
        return r28056;
}

double f_id(double a, double b) {
        double r28057 = atan2(1.0, 0.0);
        double r28058 = 2;
        double r28059 = r28057 / r28058;
        double r28060 = 1;
        double r28061 = b;
        double r28062 = r28061 * r28061;
        double r28063 = a;
        double r28064 = r28063 * r28063;
        double r28065 = r28062 - r28064;
        double r28066 = r28060 / r28065;
        double r28067 = r28059 * r28066;
        double r28068 = r28060 / r28063;
        double r28069 = r28060 / r28061;
        double r28070 = r28068 - r28069;
        double r28071 = r28067 * r28070;
        return r28071;
}


double f_of(float a, float b) {
        float r28072 = atan2(1.0, 0.0);
        float r28073 = 2;
        float r28074 = r28072 / r28073;
        float r28075 = b;
        float r28076 = a;
        float r28077 = r28075 + r28076;
        float r28078 = r28074 / r28077;
        float r28079 = 1;
        float r28080 = r28076 * r28075;
        float r28081 = r28079 / r28080;
        float r28082 = r28078 * r28081;
        return r28082;
}

double f_od(double a, double b) {
        double r28083 = atan2(1.0, 0.0);
        double r28084 = 2;
        double r28085 = r28083 / r28084;
        double r28086 = b;
        double r28087 = a;
        double r28088 = r28086 + r28087;
        double r28089 = r28085 / r28088;
        double r28090 = 1;
        double r28091 = r28087 * r28086;
        double r28092 = r28090 / r28091;
        double r28093 = r28089 * r28092;
        return r28093;
}

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 r28094, r28095, r28096, r28097, r28098, r28099, r28100, r28101, r28102, r28103, r28104, r28105, r28106, r28107, r28108;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r28094);
        mpfr_init_set_str(r28095, "2", 10, MPFR_RNDN);
        mpfr_init(r28096);
        mpfr_init_set_str(r28097, "1", 10, MPFR_RNDN);
        mpfr_init(r28098);
        mpfr_init(r28099);
        mpfr_init(r28100);
        mpfr_init(r28101);
        mpfr_init(r28102);
        mpfr_init(r28103);
        mpfr_init(r28104);
        mpfr_init(r28105);
        mpfr_init(r28106);
        mpfr_init(r28107);
        mpfr_init(r28108);
}

double f_im(double a, double b) {
        mpfr_const_pi(r28094, MPFR_RNDN);
        ;
        mpfr_div(r28096, r28094, r28095, MPFR_RNDN);
        ;
        mpfr_set_d(r28098, b, MPFR_RNDN);
        mpfr_mul(r28099, r28098, r28098, MPFR_RNDN);
        mpfr_set_d(r28100, a, MPFR_RNDN);
        mpfr_mul(r28101, r28100, r28100, MPFR_RNDN);
        mpfr_sub(r28102, r28099, r28101, MPFR_RNDN);
        mpfr_div(r28103, r28097, r28102, MPFR_RNDN);
        mpfr_mul(r28104, r28096, r28103, MPFR_RNDN);
        mpfr_div(r28105, r28097, r28100, MPFR_RNDN);
        mpfr_div(r28106, r28097, r28098, MPFR_RNDN);
        mpfr_sub(r28107, r28105, r28106, MPFR_RNDN);
        mpfr_mul(r28108, r28104, r28107, MPFR_RNDN);
        return mpfr_get_d(r28108, MPFR_RNDN);
}

static mpfr_t r28109, r28110, r28111, r28112, r28113, r28114, r28115, r28116, r28117, r28118, r28119;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28109);
        mpfr_init_set_str(r28110, "2", 10, MPFR_RNDN);
        mpfr_init(r28111);
        mpfr_init(r28112);
        mpfr_init(r28113);
        mpfr_init(r28114);
        mpfr_init(r28115);
        mpfr_init_set_str(r28116, "1", 10, MPFR_RNDN);
        mpfr_init(r28117);
        mpfr_init(r28118);
        mpfr_init(r28119);
}

double f_fm(double a, double b) {
        mpfr_const_pi(r28109, MPFR_RNDN);
        ;
        mpfr_div(r28111, r28109, r28110, MPFR_RNDN);
        mpfr_set_d(r28112, b, MPFR_RNDN);
        mpfr_set_d(r28113, a, MPFR_RNDN);
        mpfr_add(r28114, r28112, r28113, MPFR_RNDN);
        mpfr_div(r28115, r28111, r28114, MPFR_RNDN);
        ;
        mpfr_mul(r28117, r28113, r28112, MPFR_RNDN);
        mpfr_div(r28118, r28116, r28117, MPFR_RNDN);
        mpfr_mul(r28119, r28115, r28118, MPFR_RNDN);
        return mpfr_get_d(r28119, MPFR_RNDN);
}

static mpfr_t r28120, r28121, r28122, r28123, r28124, r28125, r28126, r28127, r28128, r28129, r28130;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r28120);
        mpfr_init_set_str(r28121, "2", 10, MPFR_RNDN);
        mpfr_init(r28122);
        mpfr_init(r28123);
        mpfr_init(r28124);
        mpfr_init(r28125);
        mpfr_init(r28126);
        mpfr_init_set_str(r28127, "1", 10, MPFR_RNDN);
        mpfr_init(r28128);
        mpfr_init(r28129);
        mpfr_init(r28130);
}

double f_dm(double a, double b) {
        mpfr_const_pi(r28120, MPFR_RNDN);
        ;
        mpfr_div(r28122, r28120, r28121, MPFR_RNDN);
        mpfr_set_d(r28123, b, MPFR_RNDN);
        mpfr_set_d(r28124, a, MPFR_RNDN);
        mpfr_add(r28125, r28123, r28124, MPFR_RNDN);
        mpfr_div(r28126, r28122, r28125, MPFR_RNDN);
        ;
        mpfr_mul(r28128, r28124, r28123, MPFR_RNDN);
        mpfr_div(r28129, r28127, r28128, MPFR_RNDN);
        mpfr_mul(r28130, r28126, r28129, MPFR_RNDN);
        return mpfr_get_d(r28130, MPFR_RNDN);
}

