#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 r16279624 = atan2(1.0, 0.0);
        float r16279625 = 2;
        float r16279626 = r16279624 / r16279625;
        float r16279627 = 1;
        float r16279628 = b;
        float r16279629 = r16279628 * r16279628;
        float r16279630 = a;
        float r16279631 = r16279630 * r16279630;
        float r16279632 = r16279629 - r16279631;
        float r16279633 = r16279627 / r16279632;
        float r16279634 = r16279626 * r16279633;
        float r16279635 = r16279627 / r16279630;
        float r16279636 = r16279627 / r16279628;
        float r16279637 = r16279635 - r16279636;
        float r16279638 = r16279634 * r16279637;
        return r16279638;
}

double f_id(double a, double b) {
        double r16279639 = atan2(1.0, 0.0);
        double r16279640 = 2;
        double r16279641 = r16279639 / r16279640;
        double r16279642 = 1;
        double r16279643 = b;
        double r16279644 = r16279643 * r16279643;
        double r16279645 = a;
        double r16279646 = r16279645 * r16279645;
        double r16279647 = r16279644 - r16279646;
        double r16279648 = r16279642 / r16279647;
        double r16279649 = r16279641 * r16279648;
        double r16279650 = r16279642 / r16279645;
        double r16279651 = r16279642 / r16279643;
        double r16279652 = r16279650 - r16279651;
        double r16279653 = r16279649 * r16279652;
        return r16279653;
}


double f_of(float a, float b) {
        float r16279654 = atan2(1.0, 0.0);
        float r16279655 = 2;
        float r16279656 = r16279654 / r16279655;
        float r16279657 = b;
        float r16279658 = a;
        float r16279659 = r16279657 + r16279658;
        float r16279660 = r16279656 / r16279659;
        float r16279661 = r16279658 * r16279657;
        float r16279662 = r16279660 / r16279661;
        return r16279662;
}

double f_od(double a, double b) {
        double r16279663 = atan2(1.0, 0.0);
        double r16279664 = 2;
        double r16279665 = r16279663 / r16279664;
        double r16279666 = b;
        double r16279667 = a;
        double r16279668 = r16279666 + r16279667;
        double r16279669 = r16279665 / r16279668;
        double r16279670 = r16279667 * r16279666;
        double r16279671 = r16279669 / r16279670;
        return r16279671;
}

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 r16279672, r16279673, r16279674, r16279675, r16279676, r16279677, r16279678, r16279679, r16279680, r16279681, r16279682, r16279683, r16279684, r16279685, r16279686;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r16279672);
        mpfr_init_set_str(r16279673, "2", 10, MPFR_RNDN);
        mpfr_init(r16279674);
        mpfr_init_set_str(r16279675, "1", 10, MPFR_RNDN);
        mpfr_init(r16279676);
        mpfr_init(r16279677);
        mpfr_init(r16279678);
        mpfr_init(r16279679);
        mpfr_init(r16279680);
        mpfr_init(r16279681);
        mpfr_init(r16279682);
        mpfr_init(r16279683);
        mpfr_init(r16279684);
        mpfr_init(r16279685);
        mpfr_init(r16279686);
}

double f_im(double a, double b) {
        mpfr_const_pi(r16279672, MPFR_RNDN);
        ;
        mpfr_div(r16279674, r16279672, r16279673, MPFR_RNDN);
        ;
        mpfr_set_d(r16279676, b, MPFR_RNDN);
        mpfr_mul(r16279677, r16279676, r16279676, MPFR_RNDN);
        mpfr_set_d(r16279678, a, MPFR_RNDN);
        mpfr_mul(r16279679, r16279678, r16279678, MPFR_RNDN);
        mpfr_sub(r16279680, r16279677, r16279679, MPFR_RNDN);
        mpfr_div(r16279681, r16279675, r16279680, MPFR_RNDN);
        mpfr_mul(r16279682, r16279674, r16279681, MPFR_RNDN);
        mpfr_div(r16279683, r16279675, r16279678, MPFR_RNDN);
        mpfr_div(r16279684, r16279675, r16279676, MPFR_RNDN);
        mpfr_sub(r16279685, r16279683, r16279684, MPFR_RNDN);
        mpfr_mul(r16279686, r16279682, r16279685, MPFR_RNDN);
        return mpfr_get_d(r16279686, MPFR_RNDN);
}

static mpfr_t r16279687, r16279688, r16279689, r16279690, r16279691, r16279692, r16279693, r16279694, r16279695;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r16279687);
        mpfr_init_set_str(r16279688, "2", 10, MPFR_RNDN);
        mpfr_init(r16279689);
        mpfr_init(r16279690);
        mpfr_init(r16279691);
        mpfr_init(r16279692);
        mpfr_init(r16279693);
        mpfr_init(r16279694);
        mpfr_init(r16279695);
}

double f_fm(double a, double b) {
        mpfr_const_pi(r16279687, MPFR_RNDN);
        ;
        mpfr_div(r16279689, r16279687, r16279688, MPFR_RNDN);
        mpfr_set_d(r16279690, b, MPFR_RNDN);
        mpfr_set_d(r16279691, a, MPFR_RNDN);
        mpfr_add(r16279692, r16279690, r16279691, MPFR_RNDN);
        mpfr_div(r16279693, r16279689, r16279692, MPFR_RNDN);
        mpfr_mul(r16279694, r16279691, r16279690, MPFR_RNDN);
        mpfr_div(r16279695, r16279693, r16279694, MPFR_RNDN);
        return mpfr_get_d(r16279695, MPFR_RNDN);
}

static mpfr_t r16279696, r16279697, r16279698, r16279699, r16279700, r16279701, r16279702, r16279703, r16279704;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r16279696);
        mpfr_init_set_str(r16279697, "2", 10, MPFR_RNDN);
        mpfr_init(r16279698);
        mpfr_init(r16279699);
        mpfr_init(r16279700);
        mpfr_init(r16279701);
        mpfr_init(r16279702);
        mpfr_init(r16279703);
        mpfr_init(r16279704);
}

double f_dm(double a, double b) {
        mpfr_const_pi(r16279696, MPFR_RNDN);
        ;
        mpfr_div(r16279698, r16279696, r16279697, MPFR_RNDN);
        mpfr_set_d(r16279699, b, MPFR_RNDN);
        mpfr_set_d(r16279700, a, MPFR_RNDN);
        mpfr_add(r16279701, r16279699, r16279700, MPFR_RNDN);
        mpfr_div(r16279702, r16279698, r16279701, MPFR_RNDN);
        mpfr_mul(r16279703, r16279700, r16279699, MPFR_RNDN);
        mpfr_div(r16279704, r16279702, r16279703, MPFR_RNDN);
        return mpfr_get_d(r16279704, MPFR_RNDN);
}

