#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 r8426 = atan2(1.0, 0.0);
        float r8427 = 2;
        float r8428 = r8426 / r8427;
        float r8429 = 1;
        float r8430 = b;
        float r8431 = r8430 * r8430;
        float r8432 = a;
        float r8433 = r8432 * r8432;
        float r8434 = r8431 - r8433;
        float r8435 = r8429 / r8434;
        float r8436 = r8428 * r8435;
        float r8437 = r8429 / r8432;
        float r8438 = r8429 / r8430;
        float r8439 = r8437 - r8438;
        float r8440 = r8436 * r8439;
        return r8440;
}

double f_id(double a, double b) {
        double r8441 = atan2(1.0, 0.0);
        double r8442 = 2;
        double r8443 = r8441 / r8442;
        double r8444 = 1;
        double r8445 = b;
        double r8446 = r8445 * r8445;
        double r8447 = a;
        double r8448 = r8447 * r8447;
        double r8449 = r8446 - r8448;
        double r8450 = r8444 / r8449;
        double r8451 = r8443 * r8450;
        double r8452 = r8444 / r8447;
        double r8453 = r8444 / r8445;
        double r8454 = r8452 - r8453;
        double r8455 = r8451 * r8454;
        return r8455;
}


double f_of(float a, float b) {
        float r8456 = 1;
        float r8457 = a;
        float r8458 = r8456 / r8457;
        float r8459 = b;
        float r8460 = r8456 / r8459;
        float r8461 = r8458 - r8460;
        float r8462 = r8457 + r8459;
        float r8463 = 2;
        float r8464 = r8462 * r8463;
        float r8465 = r8461 / r8464;
        float r8466 = r8459 - r8457;
        float r8467 = atan2(1.0, 0.0);
        float r8468 = r8466 / r8467;
        float r8469 = r8465 / r8468;
        return r8469;
}

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

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 r8484, r8485, r8486, r8487, r8488, r8489, r8490, r8491, r8492, r8493, r8494, r8495, r8496, r8497, r8498;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(336);
        mpfr_init(r8484);
        mpfr_init_set_str(r8485, "2", 10, MPFR_RNDN);
        mpfr_init(r8486);
        mpfr_init_set_str(r8487, "1", 10, MPFR_RNDN);
        mpfr_init(r8488);
        mpfr_init(r8489);
        mpfr_init(r8490);
        mpfr_init(r8491);
        mpfr_init(r8492);
        mpfr_init(r8493);
        mpfr_init(r8494);
        mpfr_init(r8495);
        mpfr_init(r8496);
        mpfr_init(r8497);
        mpfr_init(r8498);
}

double f_im(double a, double b) {
        mpfr_const_pi(r8484, MPFR_RNDN);
        ;
        mpfr_div(r8486, r8484, r8485, MPFR_RNDN);
        ;
        mpfr_set_d(r8488, b, MPFR_RNDN);
        mpfr_mul(r8489, r8488, r8488, MPFR_RNDN);
        mpfr_set_d(r8490, a, MPFR_RNDN);
        mpfr_mul(r8491, r8490, r8490, MPFR_RNDN);
        mpfr_sub(r8492, r8489, r8491, MPFR_RNDN);
        mpfr_div(r8493, r8487, r8492, MPFR_RNDN);
        mpfr_mul(r8494, r8486, r8493, MPFR_RNDN);
        mpfr_div(r8495, r8487, r8490, MPFR_RNDN);
        mpfr_div(r8496, r8487, r8488, MPFR_RNDN);
        mpfr_sub(r8497, r8495, r8496, MPFR_RNDN);
        mpfr_mul(r8498, r8494, r8497, MPFR_RNDN);
        return mpfr_get_d(r8498, MPFR_RNDN);
}

static mpfr_t r8499, r8500, r8501, r8502, r8503, r8504, r8505, r8506, r8507, r8508, r8509, r8510, r8511, r8512;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8499, "1", 10, MPFR_RNDN);
        mpfr_init(r8500);
        mpfr_init(r8501);
        mpfr_init(r8502);
        mpfr_init(r8503);
        mpfr_init(r8504);
        mpfr_init(r8505);
        mpfr_init_set_str(r8506, "2", 10, MPFR_RNDN);
        mpfr_init(r8507);
        mpfr_init(r8508);
        mpfr_init(r8509);
        mpfr_init(r8510);
        mpfr_init(r8511);
        mpfr_init(r8512);
}

double f_fm(double a, double b) {
        ;
        mpfr_set_d(r8500, a, MPFR_RNDN);
        mpfr_div(r8501, r8499, r8500, MPFR_RNDN);
        mpfr_set_d(r8502, b, MPFR_RNDN);
        mpfr_div(r8503, r8499, r8502, MPFR_RNDN);
        mpfr_sub(r8504, r8501, r8503, MPFR_RNDN);
        mpfr_add(r8505, r8500, r8502, MPFR_RNDN);
        ;
        mpfr_mul(r8507, r8505, r8506, MPFR_RNDN);
        mpfr_div(r8508, r8504, r8507, MPFR_RNDN);
        mpfr_sub(r8509, r8502, r8500, MPFR_RNDN);
        mpfr_const_pi(r8510, MPFR_RNDN);
        mpfr_div(r8511, r8509, r8510, MPFR_RNDN);
        mpfr_div(r8512, r8508, r8511, MPFR_RNDN);
        return mpfr_get_d(r8512, MPFR_RNDN);
}

static mpfr_t r8513, r8514, r8515, r8516, r8517, r8518, r8519, r8520, r8521, r8522, r8523, r8524, r8525, r8526;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(336);
        mpfr_init_set_str(r8513, "1", 10, MPFR_RNDN);
        mpfr_init(r8514);
        mpfr_init(r8515);
        mpfr_init(r8516);
        mpfr_init(r8517);
        mpfr_init(r8518);
        mpfr_init(r8519);
        mpfr_init_set_str(r8520, "2", 10, MPFR_RNDN);
        mpfr_init(r8521);
        mpfr_init(r8522);
        mpfr_init(r8523);
        mpfr_init(r8524);
        mpfr_init(r8525);
        mpfr_init(r8526);
}

double f_dm(double a, double b) {
        ;
        mpfr_set_d(r8514, a, MPFR_RNDN);
        mpfr_div(r8515, r8513, r8514, MPFR_RNDN);
        mpfr_set_d(r8516, b, MPFR_RNDN);
        mpfr_div(r8517, r8513, r8516, MPFR_RNDN);
        mpfr_sub(r8518, r8515, r8517, MPFR_RNDN);
        mpfr_add(r8519, r8514, r8516, MPFR_RNDN);
        ;
        mpfr_mul(r8521, r8519, r8520, MPFR_RNDN);
        mpfr_div(r8522, r8518, r8521, MPFR_RNDN);
        mpfr_sub(r8523, r8516, r8514, MPFR_RNDN);
        mpfr_const_pi(r8524, MPFR_RNDN);
        mpfr_div(r8525, r8523, r8524, MPFR_RNDN);
        mpfr_div(r8526, r8522, r8525, MPFR_RNDN);
        return mpfr_get_d(r8526, MPFR_RNDN);
}

