#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "Migdal et al, Equation (51)";

double f_if(float k, float n) {
        float r28359 = 1;
        float r28360 = k;
        float r28361 = sqrt(r28360);
        float r28362 = r28359 / r28361;
        float r28363 = 2;
        float r28364 = atan2(1.0, 0.0);
        float r28365 = r28363 * r28364;
        float r28366 = n;
        float r28367 = r28365 * r28366;
        float r28368 = r28359 - r28360;
        float r28369 = r28368 / r28363;
        float r28370 = pow(r28367, r28369);
        float r28371 = r28362 * r28370;
        return r28371;
}

double f_id(double k, double n) {
        double r28372 = 1;
        double r28373 = k;
        double r28374 = sqrt(r28373);
        double r28375 = r28372 / r28374;
        double r28376 = 2;
        double r28377 = atan2(1.0, 0.0);
        double r28378 = r28376 * r28377;
        double r28379 = n;
        double r28380 = r28378 * r28379;
        double r28381 = r28372 - r28373;
        double r28382 = r28381 / r28376;
        double r28383 = pow(r28380, r28382);
        double r28384 = r28375 * r28383;
        return r28384;
}


double f_of(float k, float n) {
        float r28385 = n;
        float r28386 = r28385 + r28385;
        float r28387 = atan2(1.0, 0.0);
        float r28388 = r28386 * r28387;
        float r28389 = 1;
        float r28390 = 2;
        float r28391 = r28389 / r28390;
        float r28392 = pow(r28388, r28391);
        float r28393 = k;
        float r28394 = r28393 / r28390;
        float r28395 = pow(r28388, r28394);
        float r28396 = r28392 / r28395;
        float r28397 = sqrt(r28393);
        float r28398 = r28396 / r28397;
        return r28398;
}

double f_od(double k, double n) {
        double r28399 = n;
        double r28400 = r28399 + r28399;
        double r28401 = atan2(1.0, 0.0);
        double r28402 = r28400 * r28401;
        double r28403 = 1;
        double r28404 = 2;
        double r28405 = r28403 / r28404;
        double r28406 = pow(r28402, r28405);
        double r28407 = k;
        double r28408 = r28407 / r28404;
        double r28409 = pow(r28402, r28408);
        double r28410 = r28406 / r28409;
        double r28411 = sqrt(r28407);
        double r28412 = r28410 / r28411;
        return r28412;
}

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 r28413, r28414, r28415, r28416, r28417, r28418, r28419, r28420, r28421, r28422, r28423, r28424, r28425;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r28413, "1", 10, MPFR_RNDN);
        mpfr_init(r28414);
        mpfr_init(r28415);
        mpfr_init(r28416);
        mpfr_init_set_str(r28417, "2", 10, MPFR_RNDN);
        mpfr_init(r28418);
        mpfr_init(r28419);
        mpfr_init(r28420);
        mpfr_init(r28421);
        mpfr_init(r28422);
        mpfr_init(r28423);
        mpfr_init(r28424);
        mpfr_init(r28425);
}

double f_im(double k, double n) {
        ;
        mpfr_set_d(r28414, k, MPFR_RNDN);
        mpfr_sqrt(r28415, r28414, MPFR_RNDN);
        mpfr_div(r28416, r28413, r28415, MPFR_RNDN);
        ;
        mpfr_const_pi(r28418, MPFR_RNDN);
        mpfr_mul(r28419, r28417, r28418, MPFR_RNDN);
        mpfr_set_d(r28420, n, MPFR_RNDN);
        mpfr_mul(r28421, r28419, r28420, MPFR_RNDN);
        mpfr_sub(r28422, r28413, r28414, MPFR_RNDN);
        mpfr_div(r28423, r28422, r28417, MPFR_RNDN);
        mpfr_pow(r28424, r28421, r28423, MPFR_RNDN);
        mpfr_mul(r28425, r28416, r28424, MPFR_RNDN);
        return mpfr_get_d(r28425, MPFR_RNDN);
}

static mpfr_t r28426, r28427, r28428, r28429, r28430, r28431, r28432, r28433, r28434, r28435, r28436, r28437, r28438, r28439;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28426);
        mpfr_init(r28427);
        mpfr_init(r28428);
        mpfr_init(r28429);
        mpfr_init_set_str(r28430, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r28431, "2", 10, MPFR_RNDN);
        mpfr_init(r28432);
        mpfr_init(r28433);
        mpfr_init(r28434);
        mpfr_init(r28435);
        mpfr_init(r28436);
        mpfr_init(r28437);
        mpfr_init(r28438);
        mpfr_init(r28439);
}

double f_fm(double k, double n) {
        mpfr_set_d(r28426, n, MPFR_RNDN);
        mpfr_add(r28427, r28426, r28426, MPFR_RNDN);
        mpfr_const_pi(r28428, MPFR_RNDN);
        mpfr_mul(r28429, r28427, r28428, MPFR_RNDN);
        ;
        ;
        mpfr_div(r28432, r28430, r28431, MPFR_RNDN);
        mpfr_pow(r28433, r28429, r28432, MPFR_RNDN);
        mpfr_set_d(r28434, k, MPFR_RNDN);
        mpfr_div(r28435, r28434, r28431, MPFR_RNDN);
        mpfr_pow(r28436, r28429, r28435, MPFR_RNDN);
        mpfr_div(r28437, r28433, r28436, MPFR_RNDN);
        mpfr_sqrt(r28438, r28434, MPFR_RNDN);
        mpfr_div(r28439, r28437, r28438, MPFR_RNDN);
        return mpfr_get_d(r28439, MPFR_RNDN);
}

static mpfr_t r28440, r28441, r28442, r28443, r28444, r28445, r28446, r28447, r28448, r28449, r28450, r28451, r28452, r28453;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28440);
        mpfr_init(r28441);
        mpfr_init(r28442);
        mpfr_init(r28443);
        mpfr_init_set_str(r28444, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r28445, "2", 10, MPFR_RNDN);
        mpfr_init(r28446);
        mpfr_init(r28447);
        mpfr_init(r28448);
        mpfr_init(r28449);
        mpfr_init(r28450);
        mpfr_init(r28451);
        mpfr_init(r28452);
        mpfr_init(r28453);
}

double f_dm(double k, double n) {
        mpfr_set_d(r28440, n, MPFR_RNDN);
        mpfr_add(r28441, r28440, r28440, MPFR_RNDN);
        mpfr_const_pi(r28442, MPFR_RNDN);
        mpfr_mul(r28443, r28441, r28442, MPFR_RNDN);
        ;
        ;
        mpfr_div(r28446, r28444, r28445, MPFR_RNDN);
        mpfr_pow(r28447, r28443, r28446, MPFR_RNDN);
        mpfr_set_d(r28448, k, MPFR_RNDN);
        mpfr_div(r28449, r28448, r28445, MPFR_RNDN);
        mpfr_pow(r28450, r28443, r28449, MPFR_RNDN);
        mpfr_div(r28451, r28447, r28450, MPFR_RNDN);
        mpfr_sqrt(r28452, r28448, MPFR_RNDN);
        mpfr_div(r28453, r28451, r28452, MPFR_RNDN);
        return mpfr_get_d(r28453, MPFR_RNDN);
}

