#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 r8454 = atan2(1.0, 0.0);
        float r8455 = 2;
        float r8456 = r8454 / r8455;
        float r8457 = 1;
        float r8458 = b;
        float r8459 = r8458 * r8458;
        float r8460 = a;
        float r8461 = r8460 * r8460;
        float r8462 = r8459 - r8461;
        float r8463 = r8457 / r8462;
        float r8464 = r8456 * r8463;
        float r8465 = r8457 / r8460;
        float r8466 = r8457 / r8458;
        float r8467 = r8465 - r8466;
        float r8468 = r8464 * r8467;
        return r8468;
}

double f_id(double a, double b) {
        double r8469 = atan2(1.0, 0.0);
        double r8470 = 2;
        double r8471 = r8469 / r8470;
        double r8472 = 1;
        double r8473 = b;
        double r8474 = r8473 * r8473;
        double r8475 = a;
        double r8476 = r8475 * r8475;
        double r8477 = r8474 - r8476;
        double r8478 = r8472 / r8477;
        double r8479 = r8471 * r8478;
        double r8480 = r8472 / r8475;
        double r8481 = r8472 / r8473;
        double r8482 = r8480 - r8481;
        double r8483 = r8479 * r8482;
        return r8483;
}


double f_of(float a, float b) {
        float r8484 = atan2(1.0, 0.0);
        float r8485 = a;
        float r8486 = b;
        float r8487 = r8485 + r8486;
        float r8488 = 2;
        float r8489 = r8487 * r8488;
        float r8490 = r8485 * r8486;
        float r8491 = r8489 * r8490;
        float r8492 = r8484 / r8491;
        return r8492;
}

double f_od(double a, double b) {
        double r8493 = atan2(1.0, 0.0);
        double r8494 = a;
        double r8495 = b;
        double r8496 = r8494 + r8495;
        double r8497 = 2;
        double r8498 = r8496 * r8497;
        double r8499 = r8494 * r8495;
        double r8500 = r8498 * r8499;
        double r8501 = r8493 / r8500;
        return r8501;
}

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 r8502, r8503, r8504, r8505, r8506, r8507, r8508, r8509, r8510, r8511, r8512, r8513, r8514, r8515, r8516;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(592);
        mpfr_init(r8502);
        mpfr_init_set_str(r8503, "2", 10, MPFR_RNDN);
        mpfr_init(r8504);
        mpfr_init_set_str(r8505, "1", 10, MPFR_RNDN);
        mpfr_init(r8506);
        mpfr_init(r8507);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init(r8511);
        mpfr_init(r8512);
        mpfr_init(r8513);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
}

double f_im(double a, double b) {
        mpfr_const_pi(r8502, MPFR_RNDN);
        ;
        mpfr_div(r8504, r8502, r8503, MPFR_RNDN);
        ;
        mpfr_set_d(r8506, b, MPFR_RNDN);
        mpfr_mul(r8507, r8506, r8506, MPFR_RNDN);
        mpfr_set_d(r8508, a, MPFR_RNDN);
        mpfr_mul(r8509, r8508, r8508, MPFR_RNDN);
        mpfr_sub(r8510, r8507, r8509, MPFR_RNDN);
        mpfr_div(r8511, r8505, r8510, MPFR_RNDN);
        mpfr_mul(r8512, r8504, r8511, MPFR_RNDN);
        mpfr_div(r8513, r8505, r8508, MPFR_RNDN);
        mpfr_div(r8514, r8505, r8506, MPFR_RNDN);
        mpfr_sub(r8515, r8513, r8514, MPFR_RNDN);
        mpfr_mul(r8516, r8512, r8515, MPFR_RNDN);
        return mpfr_get_d(r8516, MPFR_RNDN);
}

static mpfr_t r8517, r8518, r8519, r8520, r8521, r8522, r8523, r8524, r8525;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init(r8520);
        mpfr_init_set_str(r8521, "2", 10, MPFR_RNDN);
        mpfr_init(r8522);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init(r8525);
}

double f_fm(double a, double b) {
        mpfr_const_pi(r8517, MPFR_RNDN);
        mpfr_set_d(r8518, a, MPFR_RNDN);
        mpfr_set_d(r8519, b, MPFR_RNDN);
        mpfr_add(r8520, r8518, r8519, MPFR_RNDN);
        ;
        mpfr_mul(r8522, r8520, r8521, MPFR_RNDN);
        mpfr_mul(r8523, r8518, r8519, MPFR_RNDN);
        mpfr_mul(r8524, r8522, r8523, MPFR_RNDN);
        mpfr_div(r8525, r8517, r8524, MPFR_RNDN);
        return mpfr_get_d(r8525, MPFR_RNDN);
}

static mpfr_t r8526, r8527, r8528, r8529, r8530, r8531, r8532, r8533, r8534;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(592);
        mpfr_init(r8526);
        mpfr_init(r8527);
        mpfr_init(r8528);
        mpfr_init(r8529);
        mpfr_init_set_str(r8530, "2", 10, MPFR_RNDN);
        mpfr_init(r8531);
        mpfr_init(r8532);
        mpfr_init(r8533);
        mpfr_init(r8534);
}

double f_dm(double a, double b) {
        mpfr_const_pi(r8526, MPFR_RNDN);
        mpfr_set_d(r8527, a, MPFR_RNDN);
        mpfr_set_d(r8528, b, MPFR_RNDN);
        mpfr_add(r8529, r8527, r8528, MPFR_RNDN);
        ;
        mpfr_mul(r8531, r8529, r8530, MPFR_RNDN);
        mpfr_mul(r8532, r8527, r8528, MPFR_RNDN);
        mpfr_mul(r8533, r8531, r8532, MPFR_RNDN);
        mpfr_div(r8534, r8526, r8533, MPFR_RNDN);
        return mpfr_get_d(r8534, MPFR_RNDN);
}

