#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 r8105 = atan2(1.0, 0.0);
        float r8106 = 2.0f;
        float r8107 = r8105 / r8106;
        float r8108 = 1.0f;
        float r8109 = b;
        float r8110 = r8109 * r8109;
        float r8111 = a;
        float r8112 = r8111 * r8111;
        float r8113 = r8110 - r8112;
        float r8114 = r8108 / r8113;
        float r8115 = r8107 * r8114;
        float r8116 = r8108 / r8111;
        float r8117 = r8108 / r8109;
        float r8118 = r8116 - r8117;
        float r8119 = r8115 * r8118;
        return r8119;
}

double f_id(double a, double b) {
        double r8120 = atan2(1.0, 0.0);
        double r8121 = 2.0;
        double r8122 = r8120 / r8121;
        double r8123 = 1.0;
        double r8124 = b;
        double r8125 = r8124 * r8124;
        double r8126 = a;
        double r8127 = r8126 * r8126;
        double r8128 = r8125 - r8127;
        double r8129 = r8123 / r8128;
        double r8130 = r8122 * r8129;
        double r8131 = r8123 / r8126;
        double r8132 = r8123 / r8124;
        double r8133 = r8131 - r8132;
        double r8134 = r8130 * r8133;
        return r8134;
}


double f_of(float a, float b) {
        float r8135 = 1.0f;
        float r8136 = a;
        float r8137 = r8135 / r8136;
        float r8138 = b;
        float r8139 = r8135 / r8138;
        float r8140 = r8137 - r8139;
        float r8141 = 2.0f;
        float r8142 = r8136 + r8138;
        float r8143 = r8141 * r8142;
        float r8144 = r8140 / r8143;
        float r8145 = r8138 - r8136;
        float r8146 = atan2(1.0, 0.0);
        float r8147 = r8145 / r8146;
        float r8148 = r8144 / r8147;
        return r8148;
}

double f_od(double a, double b) {
        double r8149 = 1.0;
        double r8150 = a;
        double r8151 = r8149 / r8150;
        double r8152 = b;
        double r8153 = r8149 / r8152;
        double r8154 = r8151 - r8153;
        double r8155 = 2.0;
        double r8156 = r8150 + r8152;
        double r8157 = r8155 * r8156;
        double r8158 = r8154 / r8157;
        double r8159 = r8152 - r8150;
        double r8160 = atan2(1.0, 0.0);
        double r8161 = r8159 / r8160;
        double r8162 = r8158 / r8161;
        return r8162;
}

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 r8163, r8164, r8165, r8166, r8167, r8168, r8169, r8170, r8171, r8172, r8173, r8174, r8175, r8176, r8177;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8163);
        mpfr_init_set_str(r8164, "2", 10, MPFR_RNDN);
        mpfr_init(r8165);
        mpfr_init_set_str(r8166, "1", 10, MPFR_RNDN);
        mpfr_init(r8167);
        mpfr_init(r8168);
        mpfr_init(r8169);
        mpfr_init(r8170);
        mpfr_init(r8171);
        mpfr_init(r8172);
        mpfr_init(r8173);
        mpfr_init(r8174);
        mpfr_init(r8175);
        mpfr_init(r8176);
        mpfr_init(r8177);
}

double f_im(double a, double b) {
        mpfr_const_pi(r8163, MPFR_RNDN);
        ;
        mpfr_div(r8165, r8163, r8164, MPFR_RNDN);
        ;
        mpfr_set_d(r8167, b, MPFR_RNDN);
        mpfr_mul(r8168, r8167, r8167, MPFR_RNDN);
        mpfr_set_d(r8169, a, MPFR_RNDN);
        mpfr_mul(r8170, r8169, r8169, MPFR_RNDN);
        mpfr_sub(r8171, r8168, r8170, MPFR_RNDN);
        mpfr_div(r8172, r8166, r8171, MPFR_RNDN);
        mpfr_mul(r8173, r8165, r8172, MPFR_RNDN);
        mpfr_div(r8174, r8166, r8169, MPFR_RNDN);
        mpfr_div(r8175, r8166, r8167, MPFR_RNDN);
        mpfr_sub(r8176, r8174, r8175, MPFR_RNDN);
        mpfr_mul(r8177, r8173, r8176, MPFR_RNDN);
        return mpfr_get_d(r8177, MPFR_RNDN);
}

static mpfr_t r8178, r8179, r8180, r8181, r8182, r8183, r8184, r8185, r8186, r8187, r8188, r8189, r8190, r8191;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8178, "1", 10, MPFR_RNDN);
        mpfr_init(r8179);
        mpfr_init(r8180);
        mpfr_init(r8181);
        mpfr_init(r8182);
        mpfr_init(r8183);
        mpfr_init_set_str(r8184, "2", 10, MPFR_RNDN);
        mpfr_init(r8185);
        mpfr_init(r8186);
        mpfr_init(r8187);
        mpfr_init(r8188);
        mpfr_init(r8189);
        mpfr_init(r8190);
        mpfr_init(r8191);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r8179, a, MPFR_RNDN);
        mpfr_div(r8180, r8178, r8179, MPFR_RNDN);
        mpfr_set_d(r8181, b, MPFR_RNDN);
        mpfr_div(r8182, r8178, r8181, MPFR_RNDN);
        mpfr_sub(r8183, r8180, r8182, MPFR_RNDN);
        ;
        mpfr_add(r8185, r8179, r8181, MPFR_RNDN);
        mpfr_mul(r8186, r8184, r8185, MPFR_RNDN);
        mpfr_div(r8187, r8183, r8186, MPFR_RNDN);
        mpfr_sub(r8188, r8181, r8179, MPFR_RNDN);
        mpfr_const_pi(r8189, MPFR_RNDN);
        mpfr_div(r8190, r8188, r8189, MPFR_RNDN);
        mpfr_div(r8191, r8187, r8190, MPFR_RNDN);
        return mpfr_get_d(r8191, MPFR_RNDN);
}

static mpfr_t r8192, r8193, r8194, r8195, r8196, r8197, r8198, r8199, r8200, r8201, r8202, r8203, r8204, r8205;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init_set_str(r8192, "1", 10, MPFR_RNDN);
        mpfr_init(r8193);
        mpfr_init(r8194);
        mpfr_init(r8195);
        mpfr_init(r8196);
        mpfr_init(r8197);
        mpfr_init_set_str(r8198, "2", 10, MPFR_RNDN);
        mpfr_init(r8199);
        mpfr_init(r8200);
        mpfr_init(r8201);
        mpfr_init(r8202);
        mpfr_init(r8203);
        mpfr_init(r8204);
        mpfr_init(r8205);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r8193, a, MPFR_RNDN);
        mpfr_div(r8194, r8192, r8193, MPFR_RNDN);
        mpfr_set_d(r8195, b, MPFR_RNDN);
        mpfr_div(r8196, r8192, r8195, MPFR_RNDN);
        mpfr_sub(r8197, r8194, r8196, MPFR_RNDN);
        ;
        mpfr_add(r8199, r8193, r8195, MPFR_RNDN);
        mpfr_mul(r8200, r8198, r8199, MPFR_RNDN);
        mpfr_div(r8201, r8197, r8200, MPFR_RNDN);
        mpfr_sub(r8202, r8195, r8193, MPFR_RNDN);
        mpfr_const_pi(r8203, MPFR_RNDN);
        mpfr_div(r8204, r8202, r8203, MPFR_RNDN);
        mpfr_div(r8205, r8201, r8204, MPFR_RNDN);
        return mpfr_get_d(r8205, MPFR_RNDN);
}

