#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 r28171 = 1;
        float r28172 = k;
        float r28173 = sqrt(r28172);
        float r28174 = r28171 / r28173;
        float r28175 = 2;
        float r28176 = atan2(1.0, 0.0);
        float r28177 = r28175 * r28176;
        float r28178 = n;
        float r28179 = r28177 * r28178;
        float r28180 = r28171 - r28172;
        float r28181 = r28180 / r28175;
        float r28182 = pow(r28179, r28181);
        float r28183 = r28174 * r28182;
        return r28183;
}

double f_id(double k, double n) {
        double r28184 = 1;
        double r28185 = k;
        double r28186 = sqrt(r28185);
        double r28187 = r28184 / r28186;
        double r28188 = 2;
        double r28189 = atan2(1.0, 0.0);
        double r28190 = r28188 * r28189;
        double r28191 = n;
        double r28192 = r28190 * r28191;
        double r28193 = r28184 - r28185;
        double r28194 = r28193 / r28188;
        double r28195 = pow(r28192, r28194);
        double r28196 = r28187 * r28195;
        return r28196;
}


double f_of(float k, float n) {
        float r28197 = n;
        float r28198 = r28197 + r28197;
        float r28199 = atan2(1.0, 0.0);
        float r28200 = r28198 * r28199;
        float r28201 = 1;
        float r28202 = 2;
        float r28203 = r28201 / r28202;
        float r28204 = pow(r28200, r28203);
        float r28205 = k;
        float r28206 = r28205 / r28202;
        float r28207 = pow(r28200, r28206);
        float r28208 = r28204 / r28207;
        float r28209 = sqrt(r28205);
        float r28210 = r28208 / r28209;
        return r28210;
}

double f_od(double k, double n) {
        double r28211 = n;
        double r28212 = r28211 + r28211;
        double r28213 = atan2(1.0, 0.0);
        double r28214 = r28212 * r28213;
        double r28215 = 1;
        double r28216 = 2;
        double r28217 = r28215 / r28216;
        double r28218 = pow(r28214, r28217);
        double r28219 = k;
        double r28220 = r28219 / r28216;
        double r28221 = pow(r28214, r28220);
        double r28222 = r28218 / r28221;
        double r28223 = sqrt(r28219);
        double r28224 = r28222 / r28223;
        return r28224;
}

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 r28225, r28226, r28227, r28228, r28229, r28230, r28231, r28232, r28233, r28234, r28235, r28236, r28237;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init_set_str(r28225, "1", 10, MPFR_RNDN);
        mpfr_init(r28226);
        mpfr_init(r28227);
        mpfr_init(r28228);
        mpfr_init_set_str(r28229, "2", 10, MPFR_RNDN);
        mpfr_init(r28230);
        mpfr_init(r28231);
        mpfr_init(r28232);
        mpfr_init(r28233);
        mpfr_init(r28234);
        mpfr_init(r28235);
        mpfr_init(r28236);
        mpfr_init(r28237);
}

double f_im(double k, double n) {
        ;
        mpfr_set_d(r28226, k, MPFR_RNDN);
        mpfr_sqrt(r28227, r28226, MPFR_RNDN);
        mpfr_div(r28228, r28225, r28227, MPFR_RNDN);
        ;
        mpfr_const_pi(r28230, MPFR_RNDN);
        mpfr_mul(r28231, r28229, r28230, MPFR_RNDN);
        mpfr_set_d(r28232, n, MPFR_RNDN);
        mpfr_mul(r28233, r28231, r28232, MPFR_RNDN);
        mpfr_sub(r28234, r28225, r28226, MPFR_RNDN);
        mpfr_div(r28235, r28234, r28229, MPFR_RNDN);
        mpfr_pow(r28236, r28233, r28235, MPFR_RNDN);
        mpfr_mul(r28237, r28228, r28236, MPFR_RNDN);
        return mpfr_get_d(r28237, MPFR_RNDN);
}

static mpfr_t r28238, r28239, r28240, r28241, r28242, r28243, r28244, r28245, r28246, r28247, r28248, r28249, r28250, r28251;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28238);
        mpfr_init(r28239);
        mpfr_init(r28240);
        mpfr_init(r28241);
        mpfr_init_set_str(r28242, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r28243, "2", 10, MPFR_RNDN);
        mpfr_init(r28244);
        mpfr_init(r28245);
        mpfr_init(r28246);
        mpfr_init(r28247);
        mpfr_init(r28248);
        mpfr_init(r28249);
        mpfr_init(r28250);
        mpfr_init(r28251);
}

double f_fm(double k, double n) {
        mpfr_set_d(r28238, n, MPFR_RNDN);
        mpfr_add(r28239, r28238, r28238, MPFR_RNDN);
        mpfr_const_pi(r28240, MPFR_RNDN);
        mpfr_mul(r28241, r28239, r28240, MPFR_RNDN);
        ;
        ;
        mpfr_div(r28244, r28242, r28243, MPFR_RNDN);
        mpfr_pow(r28245, r28241, r28244, MPFR_RNDN);
        mpfr_set_d(r28246, k, MPFR_RNDN);
        mpfr_div(r28247, r28246, r28243, MPFR_RNDN);
        mpfr_pow(r28248, r28241, r28247, MPFR_RNDN);
        mpfr_div(r28249, r28245, r28248, MPFR_RNDN);
        mpfr_sqrt(r28250, r28246, MPFR_RNDN);
        mpfr_div(r28251, r28249, r28250, MPFR_RNDN);
        return mpfr_get_d(r28251, MPFR_RNDN);
}

static mpfr_t r28252, r28253, r28254, r28255, r28256, r28257, r28258, r28259, r28260, r28261, r28262, r28263, r28264, r28265;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r28252);
        mpfr_init(r28253);
        mpfr_init(r28254);
        mpfr_init(r28255);
        mpfr_init_set_str(r28256, "1", 10, MPFR_RNDN);
        mpfr_init_set_str(r28257, "2", 10, MPFR_RNDN);
        mpfr_init(r28258);
        mpfr_init(r28259);
        mpfr_init(r28260);
        mpfr_init(r28261);
        mpfr_init(r28262);
        mpfr_init(r28263);
        mpfr_init(r28264);
        mpfr_init(r28265);
}

double f_dm(double k, double n) {
        mpfr_set_d(r28252, n, MPFR_RNDN);
        mpfr_add(r28253, r28252, r28252, MPFR_RNDN);
        mpfr_const_pi(r28254, MPFR_RNDN);
        mpfr_mul(r28255, r28253, r28254, MPFR_RNDN);
        ;
        ;
        mpfr_div(r28258, r28256, r28257, MPFR_RNDN);
        mpfr_pow(r28259, r28255, r28258, MPFR_RNDN);
        mpfr_set_d(r28260, k, MPFR_RNDN);
        mpfr_div(r28261, r28260, r28257, MPFR_RNDN);
        mpfr_pow(r28262, r28255, r28261, MPFR_RNDN);
        mpfr_div(r28263, r28259, r28262, MPFR_RNDN);
        mpfr_sqrt(r28264, r28260, MPFR_RNDN);
        mpfr_div(r28265, r28263, r28264, MPFR_RNDN);
        return mpfr_get_d(r28265, MPFR_RNDN);
}

